一,笛卡尔集
笛卡尔集会在下面条件下产生:
①、省略连接条件
②、连接条件无效
③、所有表中的所有行互相连接
数据过大,可能运行时使电脑卡顿,
为了避免笛卡尔集, 可以在 WHERE 加入有 效的连接条件。
二,内连接:
等值连接:
1,多表等值连接的结果为多表的交集部分
2,n表连接,至少需要n-1个连接条件
3 ,多表的顺序没有要求
4,一般需要为表起别名,可以简化查询,提高执行效率
5,可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
非等值连接:
#查询员工的工资级别
SELECT salary,grade_level FROM t_mysql_employees e
JOIN t_mysql_job_grades g ON e.`salary` BETWEEN
g.`lowest_sal` AND g.`highest_sal`;
自连接:
#查询员工的名字、上级的名字
SELECT e.last_name,m.last_name FROM t_mysql_employees e
JOIN t_mysql_employees m ON e.`manager_id`= m.`employee_id`;
三,外连接
外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
左外连接,右外连接
左外连接,left join左边的是主表
右外连接,right join右边的是主表
左外和右外交换两个表的顺序,可以实现同样的效果
SELECT b.*,bo.* FROM t_mysql_boys bo LEFT OUTER JOIN t_mysql_beauty
b ON b.`boyfriend_id` bo.`id` WHERE b.`id` IS NULL;
全连接
全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
SELECT b.*,bo.* FROM t_mysql_beauty b FULL OUTER JOIN t_mysql_boys bo
ON b.`boyfriend_id` = bo.id;
交叉连接
select b.*,bo.* from t_mysql_beauty b cross join boys bo
四,常见函数:
字符函数:
作用 | 函数 | 结果 |
---|---|---|
转小写 | LOWER('SQL Course') | sql course |
转大写 | UPPER('SQL Course') | SQL COURSE |
拼接 | CONCAT('Hello', 'World') | HelloWorld |
截取 | SUBSTR('HelloWorld',1,5) | Hello |
长度 | LENGTH('HelloWorld') | 10 |
字符出现索引值 | INSTR('HelloWorld', 'W') | 6 |
字符截取后半段 | TRIM('H' FROM 'HelloWorld') | elloWorld |
字符替换 | REPLACE('abcd','b','m') | amcd |
数字函数:
作用 | 函数 | 结果 |
---|---|---|
四舍五入 | ROUND(45.926, 2) | 45.93 |
截断 | TRUNC(45.926, 2) | 45.92 |
求余 | MOD(1600, 300) | 100 |
日期函数:
作用 | 函数 | 结果 |
---|---|---|
获取当前日期 | now() | |
将日期格式的字符转换成指定格式的日期 | STR_TO_DATE('9-13-1999','%m-%d-%Y') | 1999-09-13 |
将日期转换成字符 | DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’) | 2018年06月06日 |