D34
#今日练习,练习之前学的语法。
#1.查询员工姓名,入职日期并按入职日期升序
SELECT last_name,hiredate
FROM employees
ORDER BY hiredate ASC
#2.将当前日期显示成xxxx年xx月xx日
SELECT DATE_FORMAT(hiredate,'%Y年%M月%d日') AS 日期
FROM employees
#3查询所有男生的姓名、专业名和成绩,使用SQL92和SQL99两种方式实现
##sql99
SELECT studentname,majorname,score
FROM student s JOIN result r JOIN major m
ON s.majorid = m.`majorid` AND s.`studentno`=r.`studentno`
WHERE sex = '男'
#sql02
SELECT studentname,majorname,score
FROM student s , result r , major m
WHERE s.majorid = m.`majorid` AND s.`studentno`=r.`studentno`
AND sex = '男'
#4.查询每个性别的每个专业的平均成绩,并按平均成绩排序
SELECT AVG(score) 平均成绩,majorname,studentname
FROM student s JOIN result r JOIN major m
ON s.majorid = m.`majorid` AND s.`studentno`=r.`studentno`
GROUP BY sex,majorname
ORDER BY 平均成绩
#99语法:外连接,
/*
1.把表分成主表和从表,顺序不能更改
/*
应用场景:用于查询一个表中有,另一个表没有的记录
特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join左边的是主表
右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
语法:
select 查询列表
from 表1 别名
left|right (outer) join 表2 别名
on 连接条件
where 筛选条件;
*/
#案例1:查询所有女神的记录,以及对应的男神名, 如果无,就显示null
SELECT b.*,bo.boyname
FROM beauty b
LEFT JOIN boys bo
ON b.boyfriend_id = bo.id
#案例二:查询谁没男朋友
SELECT b.name
FROM beauty b
LEFT JOIN boys bo
ON b.boyfriend_id = bo.id
WHERE bo.id IS NULL
#右连接
SELECT b.*,bo.boyname
FROM boys bo
RIGHT JOIN beauty b
ON b.boyfriend_id = bo.id
#案例三:查询那个部门没有员工,并显示其部门编号和部门名字
SELECT department_name,e.department_id
LEFT JOIN employees e
ON e.department_id =d.department_id
WHERE e.employee_id IS NULL
#练习
#1.查询编号大于3的女神的男朋友信息,如果有列出详细,没有就null填充
SELECT b.id,b.name,bo.*
FROM boys bo
RIGHT JOIN beauty b
ON bo.id =b.boyfriend_id
WHERE b.id > 3
#2.查询那个城市没有部门
SELECT d.department_id,l.city
FROM locations l
