MySQL DQL 数据查询语言(二)
DQL语言
多表查询
第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。
第二、两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
第三、多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
理解SQL查询的过程是进行SQL优化的理论依据。
内连接
内连接分为等值连接、自然连接和自连接三种,这里不说自然连接。
select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件
inner 可以不写
等值连接
以“=”号连接,列出所有列,包括重复的
自连接
查询同一表格内有关的数据。
join连接
外连接
• 左外连接 left [outer] join on
• 右外连接 right [outer] join on
outer可以不写
应用场景:用于查询一个表中有,另一个表没有的记录
特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join左边的是主表
右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
常见函数
1.字符函数
作用 | 函数 | 结果 |
---|---|---|
转小写 | LOWER(‘SQL Course’) | sql course |
转大写 | UPPER(‘SQL Course’) | SQL COURSE |
拼接 | CONCAT(‘Hello’, ‘World’) | HelloWorld |
截取 | SUBSTR(‘HelloWorld’,5) | Hello |
长度 | LENGTH(‘HelloWorld’) | sql 10 |
长度出现索引值 | INSTR(‘HelloWorld’, ‘W’) | 6 |
字符截取后半段 | TRIM(‘H’ FROM ‘HelloWorld’) | elloWorld |
字符替换 | REPLACE(‘abcd’,‘b’,‘m’) | amcd |
2.数字函数
作用 | 函数 | 结果 |
---|---|---|
四舍五入 | ROUND(45.926, 2) | 45.93 |
截断 | TRUNC(45.926, 2) | 45.93 |
求余 | MOD(1600, 300) | 100 |
3.日期函数
作用 | 函数 | 结果 |
---|---|---|
获取当前日期 | now() | sql course |
将日期格式的字符转换成指定格式的日期 | STR_TO_DATE(‘9-13-1999’,’%m-%d-%Y’) | 1999-09-13 |
将日期转换成字符 | DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’) | 2018年06月06日 |
分页查询
limit startindex,offset
startindex要显示条目的起始索引(起始索引从0开始)
offset 要显示的条目个数,按表格顺序显示
当startindex为零时可以省略不写
子查询
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
①子查询放在小括号内。
②子查询一般放在条件的右侧。
③标量子查询,一般搭配着单行操作符使用<, >=, <= ,=, <> ,>。
通常的,当一个查询语句查询不到时,就在一个查询里面放入另一个查询或者多个查询。