sql語句,oracle與mysql不同
兩表聯查練習
– 查詢財務部女員工的信息
SELECT
*
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
WHERE
d.dept_name = '財務部'
AND e.emp_sex = 0
– 查詢財務部工資大於2000的男員工的信息
SELECT
*
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
WHERE
d.dept_name = '財務部'
AND e.emp_sex = 1
AND e.emp_wage > 2000
order by的用法
– 查詢所有員工的姓名、工資、部門名稱,並以工資倒序排列
SELECT
e.emp_name,
e.emp_wage,
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
ORDER BY
e.emp_wage DESC
– 查出工資大於5000的員工id、員工姓名、部門名稱、工資
SELECT
e.emp_id,
e.emp_name,
e.emp_wage,
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
WHERE
e.emp_wage > 5000
– 查詢年齡大於20的李姓男員工的員工姓名、部門名稱
SELECT
e.emp_name,
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
WHERE
e.emp_age > 20
AND e.emp_sex = 1
AND e.emp_name LIKE '李%'
聚合函數max的用法
– 查詢工資大於男員工最大工資的女員工的員工id、員工姓名、部門名稱
SELECT
e.emp_id,
e.emp_name,
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
WHERE
e.emp_wage > (
SELECT
max(emp_wage)
FROM
t_emp
WHERE
emp_sex = 1
)
AND e.emp_sex = 0
group by的用法
– 查詢至少有三個員工的部門名稱
select
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
GROUP BY e.dept_id having count(e.emp_id)>=3
聚合函數與group by共同使用語法:group by後邊不能跟where語句,只能用having
– 查詢最大工資大於5000的部門名稱
SELECT
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
GROUP BY e.dept_id HAVING MAX(e.emp_wage) > 5000
– 查詢工資最高的張姓女員工的員工id和部門名稱
SELECT
e.emp_id,
d.dept_name
FROM
t_emp e
LEFT JOIN t_dept d ON e.dept_id = d.dept_id
WHERE
e.emp_wage = (
SELECT
max(emp_wage)
FROM
t_emp
WHERE
emp_name LIKE '張%' and emp_sex = 0
)
AND emp_name LIKE '張%' and emp_sex = 0
**
分頁:oracle與mysql的區別
**
– 分頁查詢員工表的信息,假設每頁展示5條,查詢第3頁的數據
– oracle
SELECT
*
FROM
(
SELECT
rownum r,
e.*
FROM
(SELECT * FROM t_emp) e
WHERE
rownum <= 3 * 5
)
WHERE
r > (3 - 1) * 5
– mysql
– mysql識別不了後邊進行運算,需要計算好了在拿出來
select * from t_emp LIMIT 4 , 2;
//錯誤的
select * from t_emp LIMIT (3-1)*2 , 2;
select * from t_emp limit (3-1)*5 , 5 ;
– 將財務部工資大於2000的員工的工資在原有基礎上減100
UPDATE t_emp
SET emp_wage = emp_wage + 100
WHERE
emp_wage > 2000
AND dept_id = (
SELECT
dept_id
FROM
t_dept
WHERE
dept_name = '財務部'
)
– 將財務部年齡最大的員工的工資改爲20000
– oracle
UPDATE t_emp
SET emp_wage = 20000
WHERE
emp_age = (
SELECT
max(emp_age)
FROM
t_emp
WHERE
dept_id = (
SELECT
dept_id
FROM
t_dept
WHERE
dept_name = '財務部'
)
)
– mysql,對於一些語句執行不了,會報錯,就比如這個,它識別不了oracle這種,必須也要把後邊的條件當作一張表纔可以繼續執行
UPDATE t_emp
SET emp_wage = 20000
WHERE
emp_age = (
SELECT
*
FROM
(
SELECT
max(emp_age)
FROM
t_emp
WHERE
dept_id = (
SELECT
dept_id
FROM
t_dept
WHERE
dept_name = '財務部'
)
) AS emp
)
– 刪除員工表的重複信息,認爲姓名和部門一樣是重複的
– oracle
DELETE
FROM
t_emp
WHERE
emp_id NOT IN (
SELECT
emp_id
FROM
t_emp
GROUP BY
emp_name,
dept_id
);
– mysql
DELETE
FROM
t_emp
WHERE
emp_id NOT IN (
SELECT
*
FROM
(
SELECT
emp_id
FROM
t_emp
GROUP BY
emp_name,
dept_id
) AS emp
);