DQL:数据查询语言

SQLyog中格式化某段语句片段:CTRL+F12

基础查询

  • 语法:

    select 查询列表 from 表名;
  • 特点:

    ① 查询列表可以是:表中的字段、常量值、表达式、函数

    ② 查询的结果是一个虚拟的表格,并没有存储到内存中

查询单/多个字段

# 1.查询单个字段
SELECT last_name FROM employees
# 2.查询多个字段
SELECT `first_name`,`last_name` FROM employees
# 3.查询所有字段
SELECT * FROM employees

查询常量值/表达式/函数

# 1.查询常量值
SELECT 100;
SELECT 'c';
# 2.查询表达式
SELECT 100*3;
# 3.查询函数
SELECT VERSION();

起别名,去重

# 起别名
# ①便于理解
# ②如果要查询的字段有重名的情况,使用别名可以区分开来
# as 写法
SELECT 100*3 AS 结果;
# 省略as写法,用空格分开
SELECT 100*3 结果;
# 当用多个单词如[out put]写法起别名时,会报错,应该用``包裹起来
SELECT 100*3 AS `out put` # 去重
# 查询所有员工涉及的部门编号
SELECT DISTINCT `department_id`FROM employees

+号和contact

/*
java中的+号:
①运算符,两个操作数都为数值型
②连接符,只要有一个操作数为字符串
mysql中的+号:仅仅只有一个功能->运算符
*/
select 100+90; # 两个操作数都为数值型,则做加法运算(结果 190)
select'10'+90; # 只要其中一方为字符型,试图将字符型转*成数值型如果转*成功,则继续做加法运算(结果 100)
select'john'+90;# 如果转*失败,则将字符型数值转*成0(结果 90)
select null+10; # 只要其中一方为nul1,则结果肯定为nul1(结果 null) # contact
SELECT CONCAT('a','b','c'); #结果:abc

IFNULL

# IFNULL
SELECT IFNULL(`commission_pct`,0), `commission_pct`
FROM employees

条件查询

  • 语法:

    select 查询列表(①) from 表名(②) where 筛选条件(③);

    执行顺序:②-->③-->①
  • 筛选条件的分类:

    ① 按条件表达式筛选 条件运算符;>,<,=,!=,<>,>=,<=;*等于!= or <>

    ② 按逻辑表达式筛选 逻辑运算符:&&,||,!;and or not(推荐使用)

    ③ 模糊查询 like,between,and,in,is null

按条件/逻辑表达式筛选

# 1.查询工资>12000的员工信息
SELECT * FROM employees WHERE `salary` > 12000
# 2.查询部门编号*等于90号的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id <> 90
# 3.查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary > 10000 AND salary < 20000
# 4.查询部门编号*是在90到110之间,或者工资高于15000的员工信息
SELECT * FROM employees
WHERE department_id < 90 OR department_id > 110 OR salary > 15000
# 或者
SELECT * FROM employees
WHERE NOT(department_id >= 90 AND department_id <= 110) OR salary > 15000

模糊查询

/* 1. like
一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
*/
# 1.查询员工名中包含字的员工信息
SELECT * FROM employees
WHERE last_name LIKE '%a%'
# 2.查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT last_name, salary FROM employees
WHERE last_name LIKE '__c_h%'
# 3.查询员工名中第二个字符为_的员工名
SELECT last_name FROM employees
WHERE last_name LIKE '_\_%'
# 或 (推荐使用)
SELECT last_name FROM employees
WHERE last_name LIKE '_$_%' ESCAPE '$' /* 2. between and
①使用between and可以提高语句的简洁度
②包含临界值
③两个临界值*要调*顺*
*/
# 查询员工编号在100到120之间的员工信息
SELECT * FROM employees
WHERE `department_id` BETWEEN 100 AND 120 /* 3. 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') /* 4. IS NULL
① =或<>*能用于判断null值
② is null或is not null可以判断nul1值
*/
# 查询没有奖金的员工名和奖金率
SELECT last_name, commission_pct FROM employees
WHERE commission_pct IS NULL

安全等于 <=>

# 安全等于 <=>: 既可以判断NUL工值,又可以判断普通的数值
# 1.查询没有奖金的员工名和奖金率
SELECT last_name, commission_pct FROM employees
WHERE commission_pct <=> NULL
# 2.查询工资为12000的员工信息
SELECT last_name, salary FROM employees
WHERE salary <=> 12000

排序查询asc|desc

  • 语法:
select 查询列表(①) from 表(②)
【where 筛选条件(③)】
order by 排序列表【asc|desc】(④)
  • 特点:

    asc代表的是升序,desc代表的是降序如果*写,默认是升序

    order by子句中可以支持单个字段、多个字段、表达式、函数、别名

    order by子句一般是放在查询语句的最后面,limit子句除外

    ④ 执行顺序:②--③--①--④
# 1.查询部门编号>=90的员工信息,按入职时间的先后进行排序
SELECT * FROM employees
WHERE `department_id` >= 90
ORDER BY hiredate DESC
# 2.按姓名的长度显示员工的姓名和工资【按函数排序】
SELECT LENGTH(`last_name`) AS 姓名长度,salary
FROM employees
ORDER BY 姓名长度 DESC
# 3.查询员工信息,要求先按工资排序,再按员工编号排序
SELECT employee_id, salary
FROM employees
ORDER BY salary ASC,`employee_id` DESC

常见函数

  • 调用:select 函数名(实参列表)【from表】
  • 函数分类:

    ① 单行函数: 如concat1engthifnull

    ② 分组函数;功能:做统计使用,又称为统计函数、聚合函数、组函数

字符函数

# 字符函数
# 1.length()
SELECT LENGTH('john'); # 4
SELECT LENGTH('你好,hello'); # 12 # 2.concat():拼接字符串 ,姓和名的拼接
SELECT CONCAT(last_name,'_',first_name) FROM employees; # 3.upper(),lower():大小写转*
SELECT UPPER('df'); # DF
SELECT LOWER('DF'); # df # 4.substr()
# sql中索引从1开始
SELECT SUBSTR('hello,world!',7); #world! 从第7个开始截取,包括第7个
SELECT SUBSTR('hello,world!',7,2); #wo 从第7个开始截取 2 个字符,包括第7个 # 5.instr():返回字符串第一次出现的索引
SELECT INSTR('hellolo','lo') AS 'out'; # 4 # 6.trim(): 去掉左右字符,默认是空格字符
SELECT TRIM(' h ') AS 'out'; # h
# 去掉左右b字符
SELECT TRIM('b' FROM 'bbbbb 你好 bbbbb') AS 'out'; # 你好 # 7.lpad():用指定长度实现 左填充
SELECT LPAD('hello',10,'*') AS 'out'; # *****hello
SELECT RPAD('hello',10,'*') AS 'out'; # hello***** # 8.replace(): 替*
SELECT REPLACE('hello', 'lo', '88') AS 'out'; # hel88

数学函数

# 数学函数
# 1. round():四舍五入
SELECT ROUND(3.1) AS 'out'; # 3
SELECT ROUND(-3.6) AS 'out'; # 4 绝对值四舍五入,在添符号
# 2. ceil():向上取整,返回≥该参数最小值
SELECT CEIL(3.3); # 4
SELECT CEIL(-3.3); # -3
# 3. floor():
SELECT FLOOR(9.9); # 9
SELECT FLOOR(-9.9); # -10
# 4. truncate():截断
SELECT TRUNCATE(3.3234,2); # 3.32
# 5. mod(): 取模
SELECT MOD(5,2); # 1
SELECT MOD(5,-2); # 1
SELECT MOD(-5,2); # -1

日期函数

# 日期函数
# 1. now():返回当前系统日期,包含时间
SELECT NOW(); # 2021-02-15 14:25:26
# curdate()
SELECT CURDATE(); # 2021-02-15
# curtime()
SELECT CURTIME(); # 14:26:15 # 2. 获取指定的年,月,日,时,分,秒
SELECT YEAR(NOW()); # 2021
SELECT MONTH(NOW()); # 2
SELECT DAY(NOW()); # 15
SELECT HOUR(NOW()); # 14
SELECT MINUTE(NOW()); # 27
SELECT SECOND(NOW()); # 12 SELECT YEAR(`hiredate`) AS 年 FROM employees
SELECT MONTHNAME(`hiredate`) AS 英文月 FROM employees # 3. str_to_date()将字符通过指定的格式(如下表)转*成日期
SELECT STR_TO_DATE('1999-9-9','%Y-%m-%d'); # 4. date_format():将日期转*成字符
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H时%i分%s秒') AS 'out' # 2021年02月15日 20时13分58秒

字符转*成日期的格式

格式符 功能 格式符 功能 格式符 功能
%Y 四位的年份 %y 2位的年份 %m 月份(01,02..11,12)
%c 月份(01,02..11,12) %d 日(01,02..) %H 小时(24小时制)
%h 小时(12小时制) %i 分钟(00,01..59) %s 秒(00,01..59)

其他函数version,database,user

# 其他函数
SELECT VERSION(); # 5.5.62
SELECT DATABASE(); # myemployees
SELECT USER(); # root@localhost

流程控制函数if,case

# 流程控制函数
# 1. if
SELECT IF(10 > 9,3,4); # 3
SELECT IF(10 > 11, 3, 4); # 4 # 2. case
/** 语法一:类似Java中switch case语句
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
*/
# 查询员工的工资,要求
# 部门号=30,显示的工资为1.1倍
# 部门号=40,显示的工资为1.2倍
# 部门号=50,显示的工资为1.3倍
# 其他部门,显示的工资为原工资
SELECT salary AS 原始工资,`department_id`,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END
AS 新工资
FROM employees /** 语法二:类似多重if-else
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
e1se 要显示的值n或语句n
end
*/
# 查询员工的工资的情况
# 如果工资>20000,显示A级别
# 如果工资>15000,显示B级别
# 如果工资>10000,显示c级别
# 否则,显示D
SELECT salary,
CASE
WHEN salary > 20000 THEN 'A'
WHEN salary > 15000 THEN 'B'
WHEN salary > 10000 THEN 'C'
ELSE 'D'
END
AS 级别
FROM employees

分组函数

  • 功能:用作统计使用,又称为聚合函数或统计函数或组函数
  • 分类:sum 求和、avg平均值、max最大值、min最小值、count 计算个数
  • 特点:

    sum、avg一般用于处理效值型

    max、min、count可以处理任何类型

    sum、avg、max、min、count忽略null

    ④ 可以和distinct一起使用
# 分组函数
# 1. 简单求工资总和
SELECT SUM(salary) 求和,
AVG(salary) 平均,
MAX(salary) 最大,
MIN(salary) 最小,
COUNT(salary) 个数
FROM employees
# 2. 和distinct一起使用
SELECT SUM(DISTINCT salary), SUM(salary) FROM employees
# 3. count()
SELECT COUNT(salary) FROM employees
SELECT COUNT(*) FROM employees

注意:和分组函数一起使用的只能是grop by 后的语句

分组查询

  • 语法:
select 分组函数,列(要求出现在group by的后面) from 表
【where 筛选条件】
group by 分组的列表
【order by 子句】
注意:查询列表必须特殊,要求是分组函数和group by后出现的字段

分组前筛选

# 分组查询
# 1. 查询每个工种的最高工资
SELECT MAX(`salary`) 最高工资,`job_id`
FROM employees
GROUP BY `job_id`
# 2. 查询每个位置上的部门个数
SELECT `location_id`, COUNT(*) AS 个数
FROM departments
GROUP BY `location_id`
# 3. 查询邮箱中包含a字符的,每个部门的平均工资
SELECT `department_id`, AVG(`salary`) 平均工资
FROM employees
WHERE `email` LIKE '%a%'
GROUP BY `department_id`
# 4. 查询有奖金的每个领导手下员工的最高工资
SELECT `manager_id`, MAX(`salary`) AS 最高工资
FROM employees
WHERE `commission_pct` IS NOT NULL
GROUP BY `manager_id`

分组后筛选 having

# 1. 查询哪个部门的员工个数>2
SELECT `department_id`, COUNT(*) 员工个数
FROM employees
GROUP BY `department_id`
HAVING 员工个数 > 2
# 2. 查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
SELECT `job_id` 工种编号, MAX(`salary`) 最高工资
FROM employees
WHERE `commission_pct` IS NOT NULL
GROUP BY `job_id`
HAVING 最高工资 > 12000
# 3. 查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资
SELECT `manager_id`, MIN(`salary`) 最低工资
FROM employees
WHERE `manager_id` > 102
GROUP BY `manager_id`
HAVING 最低工资 > 5000
/*
按 函数 分组
*/
# 4. 按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
SELECT LENGTH(`last_name`) 姓名长度, COUNT(*) 个数
FROM employees
GROUP BY 姓名长度
HAVING COUNT(*) > 5
/*
按多个字段分组
*/
# 5. 查询每个部门每个工种的员工的平均工资, 并排序
SELECT `department_id`, `job_id`, AVG(`salary`)
FROM employees
GROUP BY `department_id`, `job_id`
ORDER BY AVG(`salary`) ASC

连接查询/多表查询

  • 按年代分类:sq192标准(仅支持内连接), sq199标准【推荐】
  • 按功能分类:

    ① 内连接:等值连接,非等值连接,自连接

    ② 外连接:左外连接,右外连接,全外连接

    ③ 交叉连接

内连接(等值连接,非等值连接,自连接)

  • 两个表的交集
# 内连接(sql92语法)
/*
等值连接
*/
# 1. 查询员工名和对应的部门名
SELECT `last_name`, `department_name`
FROM employees, departments
WHERE employees.`department_id` = departments.`department_id`
# 2. #查询员工名、工种号、工种名
# 表中一旦起了别名,则查询的字段*能用原表名
SELECT `last_name`, j.`job_id`, `job_title`
FROM employees AS e, jobs AS j
WHERE e.`job_id` = j.`job_id`
# 3. 查询每个城市的部门个数
SELECT `city`, COUNT(*) 部门个数
FROM departments AS d, locations AS l
WHERE d.`location_id` = l.`location_id`
GROUP BY city
# 4. 查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
SELECT `department_name`, d.`manager_id`, MIN(`salary`)
FROM employees e, departments d
WHERE `commission_pct` IS NOT NULL AND e.`department_id` = d.`department_id`
GROUP BY `department_name`, d.`manager_id` /*
非等值连接
*/
# 1. 查询员工的工资和工资级别
SELECT salary, grade_level
FROM employees e, job_grades
WHERE salary BETWEEN lowest_sal AND highest_sal /*
自连接
*/
# 1. 查询员工名和上级的名称
SELECT e1.`employee_id`, e1.`last_name`, e2.`manager_id`, e2.`last_name`
FROM employees e1, employees e2
WHERE e1.`employee_id` = e2.`manager_id`

自连接解释:如:现在查询员工名和上级的名称,在employee表中manager_id中的100对应着employee_id中100,从而找到last_name:K_ing

sql99语法-内连接

  • 语法:
select查询列表
from 表1 别名【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】 连接类型:
内连接:inner
外连接
左外:left【outer】
右外:right【outer】
全外:full【outer】
交叉连接:cross
# sql99语法
/*
等值连接
*/
# 1.查询员工名、部门名
SELECT `last_name`,`department_name`
FROM employees e
INNER JOIN departments d
ON e.`department_id` = d.`department_id`
# 2. 查询名字中包含e的员工名和工种名(筛选)
SELECT `last_name`, `job_title`
FROM employees e
INNER JOIN jobs j
ON e.`job_id` = j.`job_id`
WHERE `last_name` LIKE '%e%'
# 3.查询部门个数>3的城市名和部门个数(分组+筛选)
SELECT city,COUNT(*) 个数
FROM locations l
INNER JOIN departments d
ON d.`location_id` = l.`location_id`
GROUP BY city
HAVING COUNT(*) > 3
# 4. 查询员工名、部门名、工种名,并按部门名降序()
SELECT `last_name`, `department_name`, `job_title`
FROM employees e
INNER JOIN departments d ON e.`department_id` = d.`department_id`
INNER JOIN jobs j ON e.`job_id` = j.`job_id`
ORDER BY `department_name` DESC
/*
非等值连接
*/
# 1. 查询员工的工资级别
SELECT salary, `grade_level`
FROM employees e
INNER JOIN `job_grades` j ON salary BETWEEN `lowest_sal` AND `highest_sal`
# 2. #查询工资级别的个数>20个数,并且按工资级别降序
SELECT `grade_level` 级别, COUNT(*) 个数
FROM employees e
INNER JOIN job_grades j ON salary BETWEEN `lowest_sal` AND `highest_sal`
GROUP BY `grade_level`
HAVING COUNT(*) > 20
/*
自连接
*/
# 1. 查询员工的名字、上级的名字
SELECT e1.`employee_id`, e1.`last_name`, e2.`manager_id`, e2.`last_name`
FROM employees e1
INNER JOIN employees e2 ON e1.`employee_id` = e2.`manager_id`

外连接(左外连接,右外连接,全外连接)

  • 应用场景:用于查询一个表中有,另一个表没有
  • 特点:外连接的查询结果为主表中的所有记录

    ① 如果从表中有和它匹配的,则显示匹配的值

    ② 如果从表中没有和它匹配的,则显示null
  • 主从表区分:

    ① 左外连接,left join左边的是主表

    ② 右外连接,right join右边的是主表
# 左/右外连接
# 1. 查询没有男朋友的女生信息
/*
这里用到boys和beauty表,根据题意 beauty为主表,boys为从表
从表中数据可以看出 beauty中boyfriend_id的值*在`boys`中则显示为null
*/
SELECT b.*, bo.`boyName`
FROM beauty b
LEFT JOIN boys bo ON b.`boyfriend_id` = bo.`id`



又如

# 1. 查询哪个部门没有员工
SELECT `department_name`
FROM departments d
LEFT JOIN employees e ON d.`department_id` = e.`department_id`
WHERE d.`manager_id` IS NULL

全外连接/交叉连接

  • 全外连接 = 内连接的结果 + 表1中有但表2没有的 + 表2中有但表1没有的
  • 交叉连接: 结果是笛卡尔乘积,如表1 3条记录,表2 5条记录,则全外连接结果是:3 * 5 = 15条记录

子查询

  • 出现在其他语句中的查询语句,称为子查询或内查询
  • 分类:

    ① 按子查询出现的位置:

    Ⅰ: select后面: 仅仅支持标量子查询

    Ⅱ: from后面: 支持表子查询

    Ⅲ:wherehaving后面:支持标量子查询(单行);列子查询(多行);行子查询

    Ⅳ:exists后面(相关子查询):支持表子查询

    ② 按结果集的行列数*同:

    Ⅰ: 标量子查询(结果集只有一行一列)

    Ⅱ: 列子查询(结果集只有一列多行)

    Ⅲ:行子查询(结果集有一行多列)

    Ⅳ:表子查询(结果集一般为多行多列)

where或having后面

  • 支持:标量子查询(单行子查询),列子查询(多行子查询),行子查询(多列多行)
  • 特点:

    ① 子查询放在小括号内

    ② 子查询一般放在条件的右侧

    ③ 标量子查询,一般搭配着单行操作符使用。单行操作符:>,<,>=,<=,=,<>

    ④ 列子查询,一般搭配着多行操作符使用in、any/some、all

    多行操作符含义
操作符 含义
IN,NOT IN 等于列表中的任意一个
ANY/SOME 和子查询返回的某一个值比较
ALL 和子查询返回的所有值比较

标量子查询

# 1. 谁的工资比Abel高?
SELECT last_name, salary
FROM employees
WHERE salary > (
SELECT salary FROM employees WHERE last_name = 'Abel')
# 2. 返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资
SELECT job_id FROM employees WHERE employee_id = 141 # 查询员工id=141的job_id
SELECT salary FROM employees WHERE employee_id = 143 # 查询员工id=143的薪水 SELECT `last_name`, `job_id`, `salary` FROM employees
WHERE job_id = (
SELECT job_id FROM employees WHERE employee_id = 141
)AND salary > (
SELECT salary FROM employees WHERE employee_id = 143
);
# 3. 返回公司工资最少的员工的last_name,job_id和salary
SELECT MIN(salary) FROM employees # 查询最低薪水
SELECT `last_name`, `job_id`, `salary` FROM employees
WHERE `salary` = (
SELECT MIN(salary) FROM employees
);

列子查询

# 1. 返回location_id是1400或1700的部门中的所有员工姓名
SELECT DISTINCT department_id FROM departments WHERE `location_id` IN(1400,1700) # location_id是14/700的部门id
SELECT `last_name` FROM employees WHERE department_id IN(
SELECT DISTINCT department_id FROM departments WHERE `location_id` IN(1400,1700)
);
# 2. 返回其它工种中比job_id为IT_PROG部门任一工资低的员的员工号、姓名、job_id以及salary
SELECT salary FROM employees WHERE job_id = 'IT_PROG'
SELECT `employee_id`, `last_name`, `job_id`, `salary` FROM employees
WHERE salary < ANY(
SELECT salary FROM employees WHERE job_id = 'IT_PROG'
) AND `job_id` <> 'IT_PROG';

行子查询

# 行子查询
# 查询员工编号最小并且工资最高的员工信息
SELECT MIN(`employee_id`) FROM employees
SELECT MAX(`salary`) FROM employees
SELECT * FROM employees WHERE employee_id = (
SELECT MIN(`employee_id`) FROM employees
) AND salary = (
SELECT MAX(`salary`) FROM employees
);
# 或者
SELECT * FROM employees
WHERE (`employee_id`, `salary`) = (
SELECT MIN(`employee_id`), MAX(`salary`) FROM employees
);

select后面

# select后面
# 1. 查询每个部门的员工个数
SELECT d.*, (
SELECT COUNT(*) FROM employees e
WHERE e.`department_id` = d.`department_id`
) AS 个数
FROM departments d;
# 2. 查询员工号=102的部门名
SELECT (
SELECT department_name FROM departments d, employees e
WHERE e.`employee_id` = 102 AND e.`department_id` = d.`department_id`
)

from后面

# from 后面
# 放到from后面的查询的表 必须起别名
# 1.查询每个部门的平均工资的工资等级
SELECT dep_avg.*, `grade_level` 工资等级
FROM(
SELECT `department_id`, AVG(`salary`) 平均工资 FROM employees
GROUP BY `department_id`
) dep_avg, job_grades j
WHERE dep_avg.平均工资 BETWEEN `lowest_sal` AND `highest_sal`

exists后面

  • 语法:exists(完整的查询语句) ,结果: 1或0
# exists后面
SELECT EXISTS(SELECT `department_id` FROM employees WHERE salary = 1) #0 没有结果就返回0
SELECT EXISTS(SELECT `department_id` FROM employees ) #1 查询到结果就返回1

分页查询

  • 语法:
select 查询列表
from 表
...
limit offset,size;
# offset要显示条目的起始索引(起始索引从0开始)
# size要显示的条目个数
  • 特点:

    1imit语句放在查询语句的最后

    ②公式: 要显示的页数page,每页的条目数size;则查询语句: select 查询列表 from 表 limit(page-1)*size,size
# 分页查询
# 1. 查询前五条员工信息
SELECT * FROM employees LIMIT 0,5;
SELECT * FROM employees LIMIT 5; # 当从0开始查询时,offset可省略
# 2. 查询第11条—第25条
SELECT * FROM employees LIMIT 10,15
# 3. 有奖金的员工信息,并且工资较高的前10名显示出来
SELECT * FROM employees WHERE `commission_pct` IS NOT NULL ORDER BY `salary` DESC LIMIT 10

联合查询

  • 所用关键字,union 联合,合并:将多条查询语句的结果合并成一个结果
  • 特点:

    ① 要求多条查询语句的查询列数是一致的!

    ② 要求多条查询语句的查询的每一列的类型和顺序最好一致

    union关键字默认去重,如果使用union all可以包含重复项
# 联合查询
# 1.查询部门编号>90或邮箱包含a的员工信息
SELECT * FROM employees WHERE `department_id` > 90 OR email LIKE '%a%'; SELECT * FROM employees WHERE `department_id` > 90
UNION
SELECT * FROM employees WHERE email LIKE '%a%';

MySQL-2-DQL的更多相关文章

  1. MySQL的DQL语言(查)

    MySQL的DQL语言(查) DQL:Data Query Language,数据查询语言. DQL是数据库中最核心的语言,简单查询,复杂查询,都可以做,用select语句. 1. 查询指定表的全部字 ...

  2. Mysql笔记——DQL

    DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECTselection_list /*要查询的列名称*/ FROM table_lis ...

  3. MySQL数据库之DQL(数据查询语言)

    1.MySQL之DQL查询AS CONCAT LIKE的使用 (1)select 列名1,列名2,...... from 表名 [where 条件] 查询所有字段用*,不带where条件的话,就会把表 ...

  4. 数据库Oracle和MySQL 的不同

    实例区别: MySQL是轻量型数据库,开源免费.Oracle收费,这个不是重点,,重点是它贵. MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一个库. MySQL安装只有300多兆, ...

  5. MySQL查询基础

    MySQL查询 DQL(Data Query Language ) 1.排序查询 # 语法: select 字段 from 表名 order by 字段1 [降序/升序],字段2 [降序/升序],.. ...

  6. MYSQL的Java操作器——JDBC

    MYSQL的Java操作器--JDBC 在学习了Mysql之后,我们就要把Mysql和我们之前所学习的Java所结合起来 而JDBC就是这样一种工具:帮助我们使用Java语言来操作Mysql数据库 J ...

  7. 关于mysql中的DDL,DML,DQL和DCL

    SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...

  8. Mysql 数据库操作之DDL、DML、DQL语句操作

    Mysql 数据库操作之DDL.DML.DQL语句操作 设置数据库用户名密码 l  Show databases 查看数据库列表信息 l  查看数据库中的数据表信息 ,格式: use 数据库名: sh ...

  9. MySQL的sql语言分类DML、DQL、DDL、DCL、

    MySQL的sql语言分类DML.DQL.DDL.DCL. SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data ...

  10. mysql学习【第3篇】:使用DQL查询数据

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第3篇]:使用DQL查询数据 DQL语言 DQL( Data Query Lan ...

随机推荐

  1. 如何规避容器内做Java堆dump导致容器崩溃的问题

    写在前边 最近公司生产环境的容器云上出了个性能问题,为了做性能分析,使用 JDK 自带的 jmap 收集堆dump,出现了内存溢出导致了容器崩溃. 本篇文章将带你探究,如何规避容器内做堆 dump 导 ...

  2. Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 【持续集成与交付快速入门必备】

    Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 [持续集成与交付快速入门必备]

  3. 【直播回顾】OpenHarmony知识赋能第四期第四课——音频驱动开发

    3月31日晚上19点,知识赋能第四期直播的第四节,也是本期最后一节直播课​<OpenHarmony标准系统HDF框架之音频驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办 ...

  4. 把图片存储 canvas原生API转成base64

    1.LocalStorage有什么用? 2.LocalStorage的普通用法以及如何存储图片. 首先介绍下什么是LocalStorage 它是HTML5的一种最新储存技术.但它只能储存字符串.以前的 ...

  5. 数仓建模—建模工具PdMan(CHINER)介绍

    数据仓库系列文章(持续更新) 数仓架构发展史 数仓建模方法论 数仓建模分层理论 数仓建模-宽表的设计 数仓建模-指标体系 数据仓库之拉链表 数仓-数据集成 数仓-数据集市 数仓-商业智能系统 数仓-埋 ...

  6. Water 2.6.1 发布,一站式服务治理平台

    Water(水孕育万物...) Water 为项目开发.服务治理,提供一站式解决方案(可以理解为微服务架构支持套件).基于 Solon 框架开发,并支持完整的 Solon Cloud 规范:已在生产环 ...

  7. GraphScope v0.12.0 版本发布

    GraphScope 每月进行常规版本的迭代与发布,GraphScope v0.12.0 全新版本在四月如期而至.v0.12.0 为交互式图查询 GAIA 引入全新的 IR 层以及新增 Giraph ...

  8. Apache Flink系列-④有状态函数

    有状态函数:独立于平台的有状态无服务器堆栈   这是一种在现代基础设施上创建高效.可扩展且一致的应用程序的简单方法,无论规模大小.   有状态函数是一种API,它通过为无服务器架构构建的运行时简化了分 ...

  9. Java随想1

      1If(条件){输出} Else{ } 2Switch确定范围 定值 Switch(i1){ Case 值: 输出 Break 3Do while循环 定值 Do{ 输出 运算 }while(范围 ...

  10. MySQL常用数据类型及细节

    目录 1 整数类型 1.1 可选属性 1.1.1 M 1.1.2 UNSIGNED 1.1.3 ZEROFILL 2 浮点类型 2.1 精度误差 3 定点数类型 3.1 数据精度说明 3.2 类型介绍 ...