使用的数据,请前往公众号【程序员汪汪】回复dump
,即可获取sql文件。后面的文章会一直使用这些数据。
获取sql文件后,可以使用图形界面工具(如:Navicat),创建一个空的数据库后,执行sql文件中的sql语句。
也可以创建好一个空的数据库后,在系统命令行(不是mysql的shell环境)中使用下面的命令将数据导入数据库:
# 例如:
# root换成自己的mysql用户名,123456换成自己的mysql密码
# demo是我新建的空的数据库, D:\dump.sql 换成自己下载的dump.sql文件所在路径即可。
mysql -u root -p 123456 demo < D:\dump.sql
SELECT语句
SELECT *|{[DISTINCT] column|expression [alias],...} FROM 表名
- SELECT 标识选择哪些列
- FROM 标识从哪个表中选
语法:
SELECT 查询列表 FROM 表名;
特点:
- 查询列表可以是:表中的字段、常量值、表达式、函数
- 查询的结果是一个虚拟的表格
查询全部列
SELECT * FROM 表名;
查询特定的列
SELECT id, name FROM student;
查询表达式
SELECT 100%98;
查询函数
SELECT NOW();
查询时给列取别名
在别名中包含空格或特殊的字符时,使用英文双引号包裹别名
使用别名的好处:
- 便于理解
- 如果要查询的字段有重名的情况,使用别名可以区分开来
使用as
SELECT 列名1 AS "列名1别名", 列名2 as "列名2别名" FROM 表名;
案例:
SELECT 100%98 as "结果";
SELECT last_name AS "姓", first_name AS "名" FROM employees;
使用空格
SELECT 列名1 "列名1别名", 列名2 "列名2别名" FROM 表名;
案例:
#查询salary,显示结果为 out_put
SELECT salary "out_put" FROM employees;
查询去重
SELECT DISTINCT 字段名 FROM 表名;
案例:
#查询员工表中涉及到的所有部门编号
SELECT DISTINCT department_id FROM employees;
加号(+)的作用
Java中的 + 号:
- 运算符,两个操作数都为数值型
- 连接符,只要有一个操作数为字符串,就会被当做连接符使用
MySQL中的 + 号:仅仅只有一个功能,用作运算,即运算符
# 直接运算
SELECT 数值 + 数值;
# 先试图将字符转换成数值,如果转换成功,则继续运算,否则转换成0,在做运算
SELECT 字符 + 数值;
# 结果都为null
SELECT NULL + 值;
CONCAT函数
功能:拼接字符,相当于java中的 "1" + "23" = "123";
SELECT CONCAT(字符1, 字符2, 字符3,...);
IFNULL函数
功能:判断某字段或者表达式是否为null,如果为null返回指定的值,否则返回原本的值
# 如果commission_pct列为null则返回0
SELECT IFNULL(commission_pct, 0) FROM employees;
ISNULL函数
功能:判断某字段或表达式是否为null,如果是则返回1,否则返回0
条件查询
过滤:使用 WHERE 子句,将不满足条件的行(记录)过滤掉
语法:
SELECT 查询列表 FROM 表名 WHERE 筛选条件;
运算符 | 符号 | 描述 |
---|---|---|
比较(条件)运算符 | >、<、>=、<=、=、<>(!=) | 大于、小于、大于等于、小于等于、等于、不等于 |
BETWEEN...AND... | 显示在某一区间的值(包含头尾) | |
IN(可能的值的集合) | 显示在in列表中的值,例如:IN(100, 200, 300) | |
LIKE 通配符 | 模糊查询,Like语句中有两个通配符:%用来匹配多个字符;例如first_name like 'a%'; 用来匹配一个字符。例如first_name like 'a'; | |
IS NULL | 判断是否为空;IS NULL判断为空; IS NOT NULL判断不为空 | |
逻辑运算符 | AND(&&) | 多个条件同时成立 |
逻辑运算符 | OR(||) | 多个条件任一成立 |
逻辑运算符 | NOT(!) | 不成立或者说去反,例:WHERE NOT(salary > 100) |
注意:为了方便建表,将between...and.. 、in、like、is null归为运算符,可能不是很准确
按条件表达式筛选
- 查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary > 12000;
- 查询部门编号不等于90的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id <> 90;
按逻辑表达式筛选
- 查询工资在10000到20000之间的员工名、工资以及奖金率(commission_pct)
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary >= 10000 AND salary <= 20000;
或者
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary BETWEEN 10000 AND 20000;
- 查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
NOT ( department_id >= 90 AND department_id <= 110 )
OR salary > 15000;
或者
SELECT
*
FROM
employees
WHERE
NOT ( department_id BETWEEN 90 AND 110)
OR salary > 15000;
模糊查询
关键字:LIKE
特点:
-
一般和通配符搭配使用
通配符:
%:任意多个字符,包含0个字符
_ :任意单个字符
案例:
- 查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
- 查询员工名中第三个字符为m,第五个字符为n的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__m_n%';
-
查询员工名中第二个字符为_的员工名
如果查询的字符为_,这时就需要转义,可以使用
\
,可以使用ESCAPE,定义一个转义标识ESCAPE:定义转义标识
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
IN
含义:判断某字段的值是否属于IN列表中的某一项
特点:
- 使用IN提高语句简洁度
- 列表的值类型必须一致或兼容
- 列表中不支持通配符
查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个的员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN('IT_PROG', 'AD_VP', 'AD_PRES');
或者
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
IS NULL
=或<>不能用于判断null值;IS NULL 或 IS NOT NULL可以判断null值
- 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
- 查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
安全等于<=>
- 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
- 查询工资为12000的员工信息
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
注意:
IS NULL:仅仅可以判断NULL值,可读性比较高,建议使用
<=>:既可以判断NULL值,又可以判断普通的数据,可读性比较低,不推荐使用
网友评论