SQL基础语句六 SQL92和SQL 99

SQL基础语句 92SQL 和99SQL
来源尚硅谷的SQL基础语句课堂
一. Sq92连接
等值连接
案例:查询女神名和对应的男神名
SELECT NAME,boyName
FROM boys ,beauty
WHERE beauty.boyfriend_id=boys.id;
案例2:查询员工名和对应的部门名
SELECT last_nme,department_name
FROM employees,departmentname
WHERE employees.department_id=departments.department_id;
案例3:查询员工名 工种号 工种名
SELECT last_name,employees.job_id,job_title
FROM employees,jobs
WHERE employees.job_id=jobs.job_id;
加筛选
3. 案例:查询有奖金的员工名 和部门名
SELECT last_name,department_name
FROM employees e,departments d
Where e.department_id=d.department_id
AND e.commssion_pct IS NOT NULL;
案例2:查询城市名中第二个字符为o的部门名和城市名
SELECT department_name,city
FROM departments d,locations l
WHERE d.location_id =l,location_id
AND city LIKE ‘——o%’;
案例5:查询每个城市的部门个数
SELECT COUNT(*)个数,city
FROM departments d, locations l
WHERE d.location_id=l.location_id
GROUP BY city;
案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
SELECT department_id,manger_id,MIN(salary)
FROM departments d, employees e
WHERE d.department_id= e.department_id
AND commission_pct IS NOT NULL
GROUP BY department_name,manger_id;

案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title ,COUNT()
FROM employees s,jobs j
WHERE e.job_id=j.job_id
GROUP BY job——title
ORDER BY COUNT(
) DESC;

可以实现三标链接
案例:查询员工名 部门名和所在的城市
SELECT last_name,department_name,city
FROM employees e, departments d, locations l
WHERE e.department_id=d.department_id
AND d.location_id = l.location_id;
非等值连接
案例1:查询员工的工资和工资级别
SELECT salary,garde_level
FROM employees e,job_grades g
WHERE salry BETWEEN g.lowest_sal AND g.highest_sal;

自连接
案例:查询员工名和上级的名称
SELECT employee_id,last_name,manger_id
FROM employees e ,employees m
WHERE e.manger_id=m.employee_id;
一. 显示员工表的最大工资,平均工资
SELECT MAX(salary),AVG(salary)
FROM employees;
二.查询员工表的employee_id,job_id,last_name,按department_id降序,salary升序
SELECT employee_id,job_id,last_name
FROM employees
ORDER BY department DDESC,salary ASC;
三.查询员工表的Job_id中包含 a和e 的,并且a在e的前面
SELECT job_id
FROM employees
WHERE job_id LIKE ‘%a%e%’;
四.已知表student ,里面有id name gradeId
已知表grade 里面有id name
已知表result 里面有id score studentNo
要求查询姓名 年级名 成绩
SELECT s.name, g.name ,r.score
FROM student s, grade g,resylt r
WHERE s.id=r.studentNo
AND g.id=s.gradeid;

五.显示当前日期,以及去前后空格,截取子字符串的函数
SELECT NOW()
SELECT trim(字符 from’’);
SELECT substr(str ,startIndex);
SELECT substr (str,startIndex,length);
SQL99语法
Select 查询列表
From 表一 别名 链接类型
Join 表2 别名
On 链接条件
Where 筛选条件
Group by 分组
Having 筛选条件
Order by 排序列表
内连接 inner
外连接 左外 left outer 右外 right outer 全外 full outer
交叉连接 cross
内连接
语法
Select 查询列表
FROM 表一 别名
Inner join 表2 别名
On 链接条件

  1. 等值连接
    案例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 e.last_name LIKE ‘%e%’;
    案例3:查询部门个数>3的城市名和部门个数
    SELECT city,COUNT() 部门个数
    FROM departments d
    INNOR JOIN location l
    ON d.location_id=;.location_id
    GROUP BY city
    HAVING COUNT(
    )>3;

案例4:查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
SELECT COUNT() ,department_name
FROM employees e
INNER JOIN departments d
ON e.department_id=d.department_id
GROUP BY department_name
HAVING COUNT(
)>3
ORDER BY COUNT(*) DESC;
案例5:查询员工名 部门名 工种名 并按部门名降序
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;

非等值连接
查询员工的工资级别
SELECT salary ,grade_level
FROM employees e
INNER JOIN job_grades g
ON e.salary BETWEEN g.lowest_sal AND g.highest_sal;
查询工资级别的个数>2的个数 ,并且按工资级别降序
SELECT COUNT() ,grade_level
FROM employees e
JOIN job_grades g
ON e.salary BETWEEN g.lowest_salAND g.highest_sal
GROUP BY grade_level
HAVING COUNT(
)>20
ORDER BY grade_level DESC;
三.自连接
查询员工的名字 上级名字
SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.manger_id=m.employee_id;
查询姓名中包含字符k的员工的名字,上级的名字
SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.manger_id=m.employee_id
WHERE e.last_name LIKE ‘%k%‘;

外连接
引入 :查询没有男朋友的女神名
特点: 1.外连接的查询结果为主表中的所有记录
如果从表中有和他匹配的,则显示匹配的值
如果从表中没有和他匹配的,则显示NULL
外连接查询结果=内连接结果+主表中有而从表中没有的记录
2. 左外连接,LEFT JOIN 左边的是主表
右外连接 RIGHT JOIN 右边的是主表
3. 左外和右外交换两个表的顺序,可以实现同样的效果
查询 不在男神表的女神名
SELECT b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.boyfriend_id=bo.id
WHERE bo.id IS NULL;

查询哪个部门没有员工
左外:
SELECT d.,e,employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.department_id=e.department_id
WHERE e.employee_id IS NULL;
右外:
SELECT d.
,e,employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.department_id=e.department_id
WHERE e.employee_id IS NULL;
全外:
全外连接=内连接的结果+表一中有但表二没有的+表2中有但表一没有的
USER girls;
SELECT b.,bo.
FROM beauty b
FULL OUTER JOIN boys bo
ON b.boyfriend_id=bo.id;
交叉连接

SELECT b,,bo,
FROM neauty b
CROSS JOIN boys bo;
SQ 92和SQ99
功能: SQ99支持的较多
可读性:sq99实现连接条件和筛选条件的分离,可读性较高。
案例1:查询编号>3的女神的男朋友信息,如果有则列粗详细,如果没有 用NULL
SELECT b.id,b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.boyfriend_id=bo.id
WHERE b,id>3;
案例2:查询哪个城市没有部门
SELECT city,d.*
FROM departments d
RIGHT OUTER JOIN locations l
ON d.location_id=l.location_id
WHERE d.department_id IS NULL;
案例3:查询部门名为SAL或IT的员工信息
SELECT e.*,d.department_name
FROM departments d
LIFT JOIN employees e
ON d.department_id =e.department_id
WHERE d.department_name IN(‘SAL’,’IT’);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值