DQL语言的学习
打开脚本
-root@localhost-右键-执行SQL脚本-执行-完成-手动刷新
进阶1:基础查询
语法:
SELECT 要查询的东西
【FROM 表名】;
类似于Java中 :System.out.println(要打印的东西);
特点:
①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
②要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
查询单个字段
如:SELECT last_name FROM employees;
查询表中的多个字段
如SELECT last_name FROM employees,email FROM employees;#逗号隔开,可以不考虑顺序
查询表中所有字段
- 可在左边的菜单上双击选择后再用逗号隔开
- 按F12可格式化
- *代表所有字段(但顺序会与原表一致)
查询时的细节
- 建议每次都先加 “USE 库名”;
- 用着重号·来区分关键字和字段
- 选中执行/F9
查询常量值
查询某个常量值时不需要来自(from)哪个表
查询表达式
表达式:如select 188*90;
查询函数
函数:如select VERSION();
起别名
- 如SELECT 100%98 AS 结果;
- 或者 SELECT 100%98 (空格) 结果;
去重
加上 DISTINCT
SEKECT DISTINCT department_id FROM employees;
+号的作用
mysql中的+号仅仅只有一个功能:运算符。
- 如select 100+90;
- 如select “123”+90 #其中一方为字符型,试图将字符型转换成数值型,如果转换成功,则继续做加法运算,如果转换失败,则将字符型数值转换成0。
- 如select null+0;只要其中一方为null,则结果肯定为null.
利用contact函数实现拼接
如:查询员工名和姓连接成一个字段,并显示 姓名
SELECT CONCAT('a','b','c') AS 姓名
IFNULL()
IFNULL(commission_pact,0)AS 奖金率
进阶2:条件查询
条件查询:根据条件过滤原始表的数据,查询到想要的数据
语法
select
要查询的字段|表达式|常量值|函数
from
表
where
筛选条件 ;
1.条件表达式
示例:salary>10000
条件运算符:
> < >= <= = != <>
#'<>'是不等于的意思
#案例1:查询工资>12000的员工信息
SELECT *
FROM employees
WHERE salary>12000;
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id!=90;
#----------------------------------------------
2.逻辑表达式
示例:salary>10000 && salary<20000
逻辑运算符:
and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true
#案例1:查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE salary>=10000
AND salary<=20000;
#案例2:查询部门变号不是在90到110之间,或者工资高于15000的员工信息
SLECT *
FROM employees
WHERE department_id<90 or department_id >110 or salary>15000;
或者:
SLECT *
FROM employees
WHERE NOT(department_id>=90 AND department_id <=110) OR salary>15000;
3.模糊查询
like
between and
in
is null/is not null
(1)like
特点
(1)一般和通配符搭配
通配符:
% 任意多个字符(包含0个字符)
_任意单个字符
#案例1:查询员工名中包括字符a的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '%a%';
#-------------------------------------------------------
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name,LIKE'__e_a%';
#-------------------------------------------------------
#案例3 查询员工名中第二个字符为_员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%';#或者last_name LIKE '_$_%'ESCAPE '$';
(2)between and
特点
i. 提高语句简洁度
ii. 包含临界值
iii. 两个临界值不能调换顺序
#案例1:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
(3)in
含义
判断某字段的值是否属于in列表中的某项目
特点
i. 使用in提高语句简洁度
ii. in列表的值类型必须一致或兼容
iii. 不支持通配符
#案例:查询员工的工种的编号是 IT_PROT、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PROT','AD_VP','AD_PRES');
(4)is null
特点
i. =或<>不能用于判断null值
ii. is null或is not null 可以判断null值
#案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commision_pct
FROM
employees
WHERE
commision_pct IS NULL;
#案例2:查询有奖金的员工名和奖金率
SELECT
last_name,
commision_pct
FROM
employees
WHERE
commision_pct IS NOT NULL;
(5)安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commision_pct
FROM
employees
WHERE
commision_pct <=> NULL;
#案例2:查询工资为12000的员工信息
SELECT
last_name
salary
FROM
employees
WHERE
salary <=> 12000;
进阶3:排序查询
语法
select
要查询的东西
from
表
where
筛选条件
order by 排序的字段|表达式|函数|别名 【asc|desc】#升序或降序
#案例1:查询员工信息,要求工资从高到低排序
SELECT *
FROM employees
ORDER BY salary DESC;
#ORDER BY salary ASC;为从低到高
#案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序(添加筛选条件)
SELECT *
FROM employees
WHERE department_id >=90
ORDER BY hiredate ASC;
#案例3:按年薪的高低显示员工的信息和年薪(按表达式排序)
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY salarysalary*12*(1+IFNULL(commission_pct,0)) DESC;
#案例4:按年薪的高低显示员工的信息和年薪(按别名排序)
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;
#案例5:按姓名的长度显示员工的姓名和工资(按函数排序)
SELECT LENGTH(last_name) 字节长度,last_name,salary
FROM employees
ORDER BY LENGTH(last_name) DESC;
#这里换成字节长度也是可以的,如
ORDER BY 字节长度 DESC;
#案例6:查询员工信息,要求先按工资排序,再按员工编号排序
SELECT *
FROM employees
ORDER BY salary ASC,employee_id DESC #不可以ORDER BY两次
特点
- asc代表升序,desc代表减序,如果不写,默认升序
- order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
- order by 子句一般是放在查询语句的最后面,但limit子句除外。