一、最基本的SELECT语句
1、基本结构
SELECT 字段1,字段2 FROM 表名;
select * from table_name;
*表示表中的所有字段(或者列)
2、列的别名、去重
-
列的别名:
假设我们要从t_employee表中查询employee_id并给他一个别名- 使用as关键字:
SELECT employee_id AS emp_id FROM t_employee;
- 使用空格:
SELECT employee_id emp_id FROM t_employee;
- 使用双引号:
SELECT employee_id AS "emp id" FROM t_employee;
,假如别名中存在空格,我们就需要用到双引号了
- 使用as关键字:
-
去重:使用DISTINCT关键字,假设我们要从员工表中看公司多少部门
SELECT DISTINCT department_id FROM t_employee;
3、空值参与计算,结果字段也会为null
解决方案:引入IFNULL
空值:null
数据库中null不等于0和’ ’
4、着重号
如果你的表名或者字段与保留字、数据库系统或者常用方法重名,我们在执行SELECT语句进行查询时就要使用着重号进行规避。假设有一个表的名字叫ORDER,这与排序关键字重名了
SELECT * FROM `ORDER`;
5、查询常数
如果我们想在查询语句的结果集的每一行都额外展示某些固定内容,就可以使用查询常数了
SELECT '十年设置的查询常数',employee_id,employee_name
FROM t_employee;
6、显示表结构:使用DESCRIBE
或者DESC
,查看创建表时各个字段的详细信息
DESCRIBE t_employee;
7、使用Where过滤
想要根据某些条件查询指定数据,可以使用WHERE关键字,将其声明在FROM关键字后面
SELECT *
FROM t_employee
WHERE employee_id = 'decade001';
二、SQL中运算符的使用
1、算数运算符
包含加+ 减- 乘* 除/(或者使用DIV) 取模%(或者使用MOD)
2、比较运算符
- 比较运算符用来比较表达式左边和右边的操作数,结果为真返回1,结果为假返回0
- 等于判断:=
- 如果数值和字符串进行比较,会对字符串做一个隐式转换,字符串转换不成功,将它的值视作0,两边都是字符串时就正常比较
- 只要有null参与判断,结果就为null,所以当我们想使用WHERE关键字去筛选某个字段为空值的数据时,不能使用
WHERE condition = NULL
,而是使用WHERE condition IS NULL
或者下面的安全等于
- 安全等于:<=>,它的作用和等于类似,但是区别在于它可以对空值NULL做一个判断
- 不等于:<>或者!=,大于>,大于等于>=,小于等于<=,小于<
- 关键字:除了上面的运算符之外,还有一些关键字供我们进行运算
- 判断是否为NULL:
WHERE 字段 IS NULL
、WHERE ISNULL(字段)
和WHERE 字段 IS NOT NULL
(使用WHERE NOT 字段 <=> NULL
也可以) - 最小和最大:
SELECT LEAST(a1, a2, a3) FROM ...
、SELECT GREATEST(a1, a2, a3) FROM ...
,字符就是按照字段顺序比,数值就是比大小 - 在某个区间内:
WHERE 条件字段 BETWEEN 边界值1 AND 边界值2
,它会包含边界值,如果想筛选区间之外的,只需要在BETWEEN
前面加上NOT BETWEEN 边界值1 AND 边界值2
即可 - 判断是否在列表中:
IN
和NOT IN
,例如SELECT * FROM t_test WHERE 字段 IN (a1, a2, a3);
和SELECT * FROM t_test WHERE 字段 NOT IN (a1, a2, a3);
- 模糊查询:
LIKE
,- %:表示不确定个数的字符,可能是一个或多个。例如我们想查询某个名字包含a的人员的信息,那么对应的语句就是
SELECT * FROM t_test WHERE name LIKE '%a%';
,如果是a%就代表以a开头的模糊匹配,如果是%a就是以a结尾的模糊匹配 - _:表示一个不确定的字符,如果我们想查询名字的第二位是a的人员的信息,那么对应的语句就是
SELECT * FROM t_test WHERE name LIKE '_a%';
,以此类推,可以限定a所在的位置 - \:转义字符,假如我们想查询名字的第二位是_,第三位是a的人员的信息,那么对应的语句就是
SELECT * FROM t_test WHERE name LIKE '_\_a%';
,或者SELECT * FROM t_test WHERE name LIKE '_$_a%' ESCAPE '$';
(告诉系统$在这里起转义字符的作用)
- %:表示不确定个数的字符,可能是一个或多个。例如我们想查询某个名字包含a的人员的信息,那么对应的语句就是
- 正则表达式:REGEXP和RLIKE
- 判断是否为NULL:
3、逻辑运算符
- 逻辑非:NOT或 !
- 逻辑与:AND或 &&,注意AND的优先级高于OR
- 逻辑或:OR或 ||
- 逻辑异或:XOR,表达式左右两边一个条件为真一个条件为假,例如
SELECT * FROM t_test WHERE t_id > 50 XOR salary < 10000;
,这样就会返回id大于50且工资大于等于10000,或者id小于等于50且工资小于10000的人员信息
4、位运算符
位运算符在SQL不常用,我们只需要简单了解用法即可
位运算会先将操作数变成二进制数,然后进行位运算,最后再将计算结果从二进制数变回十进制数
|
:按位或,A|B
中,二进制相同位只要有一个为1时就为1
&
:按位与,A&B
中,二进制相同位如果都为1时才为1
^
:按位异或,A^B
中,二进制相同位如果都为1或者都为0,异或之后该位就为0,只有相同位上的数不同时才会为1
~
:按位取反,1就变0,0就变1
<<
:按位左移,将二进制整体向左移,然后用0来补空出来的位置
>>
:按位右移,将二进制数整体向右移
-- 5变成二进制0101
-- 1变成二进制0001
select 5 & 1 FROM DUAL; --1
select 5 | 1 FROM DUAL; --5
select 5 ^ 1 FROM DUAL; --4
select 5 & ~1 FROM DUAL; --4
select 5 << 1 FROM DUAL; --10
select 5 >> 1 FROM DUAL; --2
如有错误,欢迎指正!!!