SQL 基础操作
- 创建表 -- CREATE TABLE
- 修改表 -- ALTER/DELETE TABLE
- 插入(增) -- INSERT INTO
- 删除(删)--DELETE FROM
- 更新(改)-- UPTATE-SET-WHERE
- 查询(重点)--select
-
- 查询-通用语法
- 查询-LIMIT的使用 (重点使用场景:top *、分页功能)
- SELECT DISTINCT 的使用
-
- 语法
创建表 – CREATE TABLE
语法
CREATE TABLE mytable (# int 类型,不为空,自增id INT NOT NULL AUTO_INCREMENT,# int 类型,不可为空,默认值为 1,不为空col1 INT NOT NULL DEFAULT 1,# 变长字符串类型,最长为 45 个字符,可以为空col2 VARCHAR(45) NULL,# 日期类型,可为空col3 DATE NULL,# 设置主键为 idPRIMARY KEY (`id`));
修改表 – ALTER/DELETE TABLE
3个主要功能:增加列、删除列、删除表
ALTER TABLE === 修改;
DROP TABLE===表的删除;【区别:元组删除使用关键字delete from】
# 增加列
ALTER TABLE mytable add col5 VARCHAR(25);
# 删除列
ALTER TABLE mytable DROP COLUMN col5;
# 删除表
DROP TABLE mytable;
插入(增) – INSERT INTO
往表格中插入数据,掌握分别插入 值 (VALUES)、某个表中检索的部分数据(SELECT …)、一个表的内容(CREATE … AS SELECT…) 三种不同插入方式。
语法:
# 1、普通插入**值**:往mytable 表中的列:col1,col2列插入值1,2;
INSERT INTO mytable(col1,col2) VALUES (1,2);
# 2、插入 : **从某个表中检索出来的值**
**INSERT INTO mytable(col1,col2) SELECT col1,col2 From mytable2;
#3、插入:将**一个表的内容**,插入到一个新表
CREATE TABLE newtable AS SELECT * FROM mytable;
删除(删)–DELETE FROM
- 功能1:从表中删除某个元组; DELETE FROM
- 功能2:删除所有行; TRUNCATE TABLE
# 功能1:从表中删除某个元组;
DELETE FROM mytable where id = 1;
# 功能2:删除所有行;
TRUNCATE TABLE mytable;
注意:
- 区别于删除表的关键字:删除表使用DROP TABLE关键字;
- 从表中删除某行元组,使用 DELETE FROM 关键字
更新(改)-- UPTATE-SET-WHERE
功能:更新表中的某数据:
UPDATE mytable SET col1 = 10 WHERE id = 2;
注意:使用update 和 delete 时一定要用where子句,不然会破环整张表的数据
查询(重点)–select
掌握功能:
- 通用语法;
- LIMIT语句;
- SELECT DISTINCT语句;
查询-通用语法
SELECT [DISTINCT] column_name,column_nameFROM table_name[WHERE Clause][LIMIT N] [OFFSET M]
- 查询语句中可以使用多个表,用逗号(,)隔开,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 使用 LIMIT 属性来设定返回的记录数
- OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
查询-LIMIT的使用 (重点使用场景:top *、分页功能)
LIMIT:设置返回的行数。后边可以有1个参数,也可以有两个参数:
1、limit 后有一个参数时,该参数表示要返回的行数
SELECT * FROM mytable LIMIT 6; # 返回(前)6行;
2、limit 后有两个参数时,第一个参数表示要跳过的数量,后一位表示要取的数量
SELECT * FROM mytable LIMIT 3,3;
# 跳过第3条数据,从第4条数据开始,返回6行结果,即返回第4,5,6行的结果
3、 limit 和 offset 共用时:limit后只能有一个参数,表示要取得数量;offset 后表示要跳过得数量;
SELECT * FROM mytable LIMIT 2 offset 3 ;
# 表示跳过3条,取2条,即第4,5条
练习:查询第二高的薪水
# 说明:表Salary:
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
# 查询第二高的薪水
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。# 思路:先对Salary 进行降序排序,然后再使用limit语句,查询第二高的薪水并返回
# 需要特别注意:
# 有可能表中只存在一行数据,使用limit查询第二高会返回空,所以用临时表,先查找排序limit结果,再select 最后结果:
select(select Distinct Salary from Salary #去重order by Salary DESC limit1,1 #从第2行开始读,返回1条结果
) as SecondHighestSalary使用如下语句,在返回空时会出错:select distinct Salary as SecondHighestSalary from Salary order by Salary DESC limit1,1
SELECT DISTINCT 的使用
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
语法
SELECT DISTINCT column_name,column_name **FROM** table_name;