數據庫sql基本語句刷題

1.

很基礎的一道多表查詢題,因爲題目要求:無論person是否有地址信息,都需要基於上述兩表提供person,那很明顯就是保留表1全部+加上表12公共部分,所有使用left join ...on...的結構

select a.FirstName, a.LastName, b.City, b.State  from Person as a left join Address as b on a.PersonId = b.PersonId;

2.

排序肯定是使用order by 關鍵字,默認是低到高排序,這裏需要高到低,所以需要desc關鍵字。這裏要第二高的薪水,就需要limit 和offset組合使用,limit是規定返回幾個元素而offset是從索引幾開始返回。這裏還要求如果不足2個時,返回null,所以就要使用ifnull關鍵字,將剛纔的查詢作爲子表。

select 
    ifnull(
        (select distinct Salary from Employee order by Salary desc limit 1 offset 1),null) as SecondHighestSalary;

3.

同樣和上題一樣,ifnull就是判別該值爲Null時,給它什麼值。

select ifnull (unique_id,null) as unique_id,name from Employees left join EmployeeUNI on Employees.id = EmployeeUNI.id;

4.

兩種解法:第一種使用not in 關鍵字,查詢student表中department_id不在Departmengt表中的id的條目,這裏not in要跟一個子表,不能直接寫Departments.id。

第二種解法則是使用聯結,left join,條件則是id = department_id,如果匹配不上,會默認成Null。

select id, name from Students where department_id not in (select id from Departments);
select s.id, s.name from Students s left join Departments d on(d.id = s.department_id) where d.id is Null;

5.

還是聯結的考點。

select P.product_name, S.year, S.price from Product P right join Sales S on P.product_id = S.product_id;

6.

解法:使用子表。結果要求employee_id和team_size兩個參數,前者在原表中有,後者是要求我們使用count來計算出個數,這裏馬上能聯想到group by關鍵字來通過team_id分組,然後計算出個數,來作爲team_size的值。

select e.employee_id,c.team_size from Employee as e,(select team_id,count(team_id) as team_size from Employee group by team_id) as c where e.team_id = c.team_id;

7.

解法:分組加子表,和上題一樣

select p.product_id,c.total_quantity from Product as p,(select product_id,sum(quantity) as total_quantity from Sales s group by product_id) as c where p.product_id = c.product_id;

8.

SELECT
    p1.x, p2.x, ABS(p1.x - p2.x) AS distance
FROM
    point p1
        JOIN
    point p2 ON p1.x != p2.x
;
SELECT
    MIN(ABS(p1.x - p2.x)) AS shortest
FROM
    point p1
        JOIN
    point p2 ON p1.x != p2.x
;

9.

group by 和having是配合使用的,having的用法與where類似,都是後面添加條件的,但不同的是,where實在聚合函數作用前,而having實在聚合函數作用之後。 

select Email from Person group by Email having count(Email) > 1;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章