MySQL 表的基本操作
创建语句
插入语句
修改语句
查询语句
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;
外连接
左连接、右连接的具体说明可以看下图,其实左连接就是先将两个表的列都拼接起来,接着将左边的表中的行全部输出,右边的表只输出符合条件的行。右连接就相反。
案例
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
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment