欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常见的数据SQL查询问题

程序员文章站 2024-03-23 19:57:16
...

1. 等值查询

SELECT e.empId, e.username, e.salary, d.deptId, d.deptName 
FROM employee e, department d 
WHERE e.deptId = d.deptId;

2. 三表等值连接询
SELECT e.empId, e.username, ei.realName, e.password, ei.age, e.email, e.salary, d.deptId, d.deptName
FROM employee e, employeeInfo ei ,department d
WHERE e.empId=ei.empId AND e.deptId=d.deptId;

3. 内连接:内连接返回两个表中所有满足连接条件的数据记录。
-- 以下三种查询方式查询结果相同:
SELECT e.empId, e.username, e.salary, d.deptId, d.deptName 
FROM employee e, department d 
WHERE e.deptId = d.deptId;
	
SELECT e.empId, e.username, e.salary, d.deptId, d.deptName 
FROM employee e 
JOIN department d 
ON e.deptId = d.deptId;
	
ELECT e.empId, e.username, e.salary, d.deptId, d.deptName 
FROM employee e 
INNER JOIN department d 
ON e.deptId = d.deptId;

4. 外连接:不仅返回满足连接条件的记录,还将返回不满足连接条件的记录。
(1) 左外连接:以左表为驱动,检索右表,检索结果是:显示左表的所有数据和右表中满足where条件的数据,右表中不满足条件的位置用null填充。
SELECT e.empId, e.username, e.gender, e.email, e.salary, e.comm, e.shift, e.deptId, d.deptName
FROM employee e 
LEFT OUTER JOIN department d 
ON e.deptId = d.deptId;
常见的数据SQL查询问题


(2) 右外链接:以右表为驱动,检索左表,检索结果是:显示右表的所有数据和左表中满足where条件的数据,左表中不满足条件的位置用null填充。

SELECT e.empId, e.username, e.gender, e.email, e.salary, e.comm, e.shift, e.deptId, d.deptName
FROM employee e 
RIGHT OUTER JOIN department d 
ON e.deptId = d.deptId;

常见的数据SQL查询问题


(3) 全外连接:除了返回两个表中满足连接条件的记录,还会返回不满足连接条件的所有其它行
SELECT e.empId, e.username, e.gender, e.email, e.salary, e.comm, e.shift, e.deptId, d.deptName
FROM employee e 
FULL OUTER JOIN department d 
ON e.deptId = d.deptId;

常见的数据SQL查询问题


5. 自连接:自连接是一种特殊的连接查询,数据的来源是一个表,即关联关系来自于单表中的多个列。表中的列参照同一个表中的其它列的情况称作自参照表。
  自连接是通过将表用别名虚拟成两个表的方式实现,可以是等值或不等值连接。
  语法结构:
SELECT t1.C1, t1.C2, t1.C3, t2.C1, t2.C2, t2.C3
FROM table t1
JOIN table t2
ON t1.Cx = t2.Cx;

典型查询问题:通过员工用户名(工号)查询员工信息表中某一员工上司的信息。
思路分析:为所要查询的表分别取两个不同的别名,一个表示员工信息表,一个表示上司信息表;
    然后通过条件:员工信息表中员工上司编号=上司信息表中的员工编号,并且员工信息表中的用户名=要查询的员工的用户名(工号),实现查询。
SELECT emps.empno, emps.ename, manager.empno, manager.ename, manager.sal, manager.comm
FROM emp emps, emp manager
WHERE emps.mgr=manager.empno 
AND lower(emps.ename)='gavin';
				  
SELECT m.empid, m.username, m.password, m.gender, m.email, m.salary, m.comm, m.title, m.superior, m.deptid, m.shift
FROM employee e, employee m 
WHERE e.superior=m.empid 
		AND e.username='Zhang Long';

6. 查询一张表中某一字段出现重复的数据值:
-- 根据员工信息表(employee)查询企业都有哪些职位(title)。
    SELECT title FROM employee GROUP BY title HAVING COUNT(*)>1;

7. 查询一张表中某一字段出现重复的数据值,并统计重复次数:
-- 查询员工信息表(employee)中所有职位(title),以及各职位有多少人。
   SELECT COUNT(empId), title FROM employee GROUP BY title;

8. 查询一种表中某一字段出的现重复数据值对应的所有数据:
-- 查询员工信息表(employee)中所有职位(title)重复的员工的全部信息。
   SELECT * FROM employee WHERE title in (SELECT title FROM employee GROUP BY title HAVING COUNT(title)>1);