创建语句

插入语句

修改语句

查询语句

SELECT [column name] FROM [table name] (WHERE [expression])

column name : 结果表的列名
table name  : 选取的表 
expression  : 约束前面生成的表中的内容.通俗来讲就是根据表达式来显示结果。

连接

交叉连接: 实际上就是两者表的笛卡尔积 。 使用CROSS JOIN

内连接

内连接查询操作只列出与连接条件匹配的数据行,使用 INNER JOIN 或者直接使用 JOIN 进行连接。

SELECT student.name,score.codeFROM student JOIN score ON score.code=student.code;

外连接

左连接、右连接的具体说明可以看下图,其实左连接就是先将两个表的列都拼接起来,接着将左边的表中的行全部输出,右边的表只输出符合条件的行。右连接就相反。

数据库连接.jpg

案例

1.组合两张表

表1: Person

+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主键
表2: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键
 

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

 
FirstName, LastName, City, State

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combine-two-tables
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

答案

SELECT FirstName,LastName,City,State FROM PERSON P LEFT JOIN ADDRESS A 
ON P.PERSONID=A.PERSONID  ;

2.第二高的薪水

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

答案

SELECT IFNULL((SELECT DISTINCT Salary FROM EMPLOYEE ORDER BY SALARY DESC LIMIT 1, 1),NULL) AS SecondHighestSalary;

解析 :
limit n,m 跳过第n条记录返回m条记录

从最外面一层看,SELECT IFNULL(...) AS SecondHighestSalary 就是将函数IFNULL()中返回的列改名为SecondHighestSalary输出,其实有没有AS 没区别,加了会比较清楚直观,一般把这种需要重命名的列用空格间隔后面跟上新名字就好了。

SELECT DISTINCT Salary FROM EMPLOYEE ORDER BY SALARY DESC LIMIT 1, 1

这一句是全部里面最关键的,DISTINCT关键字是去重复行。
以下是执行步骤:
1.对Salary列进行排序(DESC降序)
2. LIMIT 1,1 对排序后的结果取第二个值。
3. 返回列的结果给IFNULL
4. IFNULL 判断列的值是否为NULL,为NULL则改为NULL