sql語句練習,oracle與mysql不同

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
	);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章