一、最基本的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;,假如别名中存在空格,我们就需要用到双引号了
  • 去重:使用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 NULLWHERE 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即可
  • 判断是否在列表中:INNOT 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 '$';(告诉系统$在这里起转义字符的作用)
  • 正则表达式:REGEXP和RLIKE

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

如有错误,欢迎指正!!!