• info svip

SQL简易入门Handbook

SQL是数据库的查询语言,也是BA/DA求职面试经常考查的内容。今天我们来学习一下,SQL基础语句。

什么是SQL?

  • SQL可以对数据库执行查询

  • SQL可以从数据库检索数据

  • SQL可以在数据库中插入记录

  • SQL可以更新数据库中的记录

  • SQL可以从数据库中删除记录

  • SQL可以创建新的数据库

  • SQL可以在数据库中创建新表

  • SQL可以在数据库中创建存储过程

  • SQL可以在数据库中创建视图

  • SQL可以对表,过程和视图设置权限

SQL常用语法

  • SELECT -从数据库中提取数据

  • WHERE - 用于过滤记录

  • UPDATE -更新数据库中的数据

  • DELETE -从数据库中删除数据

  • INSERT INTO -将新数据插入数据库

  • CREATE DATABASE -创建一个新的数据库

  • ALTER DATABASE -修改数据库

  • CREATE TABLE -创建一个新表

  • ALTER TABLE -修改表格

  • DROP TABLE -删除表格

  • CREATE INDEX -创建索引(搜索关键字)

  • DROP INDEX -删除索引


1. SELECT语句

从【数据表】中选择某些(个)【数列】:

SELECT column1, column2, ... FROM table_name;


从【数据表】中选择所有【数列】:

SELECT * FROM table_name;


从【数据表】中选择无重复值的某个【数列】:

* 在表内部,一列通常包含许多重复值;SELECT DISTINCT语句仅用于返回不同的值

SELECT DISTINCT column1, column2

FROM table_name;

2. WHERE & HAVING语句

从【数据表】中选择只满足指定条件(Condition)的【数列】:

SELECT column1, column2, ... FROM table_name WHERE condition;


HAVING:补上了WHERE无法同聚合函数一起使用:

SELECT COUNT(customerID), country FROM table_name GROUP BY country

HAVING COUNT(customerID) > 10


子语句:

  • ANY:满足任一条件,返回为TRUE

  • ALL:满足所有条件,返回为TRUE

# ALL - 查询出01班中,年龄大于 02班所有人的同学

SELECT * FROM student

WHERE class='01' AND age > ALL (

SELECT age FROM student class='02'

);

# 相当于

SELECT * FROM student

WHERE class='01' AND age > (

SELECT MAX(age) FROM student WHERE class='02'

);


# ANY - 查询出01班中,年龄大于 02班任意一个的同学

SELECT * FROM student

WHERE class='01' AND age > ANY (

SELECT age FROM student WHERE class='02'

);

# 相当于

SELECT * FROM student

WHERE class='01' AND age > (

SELECT MIN(age) FROM student WHERE class='02'

);



3. ORDER BY语句

默认升序排列,如需降序排列会用到DESC关键词

SELECT column1, column2, ...

FROM table_name

ORDER BY column1 DESC, column2 ASC;

4. INSERT INTO & INSERT INTO SELECT语句

# INSERT INFO

a.指定列名称和要插入的值:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

b. 如果要为表的所有列添加值,则无需在SQL查询中指定列名,但要确保值的顺序与表中各列的顺序相同。

INSERT INTO table_name VALUES (value1, value2, value3, ...);


# INSERT INFO SELECT

从一个表中复制数据并将其插入到另一个表中

INSERT INTO table2 (column1, column2, column3, ...)

SELECT column1, column2, column3, ...

FROM table1 WHERE condition;


5. UPDATE语句

UPDATE语句,用于修改表中的现有记录:

* 注意:WHERE语句中的子句UPDATE,该WHERE子句指定应更新的记录;如果省略该WHERE子句,表中的所有记录将被更新。

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;


6. DELETE语句

DELETE语句用于删除表中的现有记录:

* 注意 WHERE语句中的子 DELETE,该WHERE子句指定应删除的记录;如果省略该WHERE子句,表中的所有记录将被删除。

DELETE FROM table_name

WHERE condition;

7. LIMIT(SELECT TOP/FETCH)语句

从【数据表】中选择【指定行】数据:

#SQL

SELECT TOP 3 FROM table_name;

#MySQL

SELECT * FROM table_name

LIMIT 3;


#Oracle

SELECT * FROM Customers FETCH FIRST 3 ROWS ONLY;

8. LIKE语句

用于WHERE子句中的筛选条件,通常配合以下符号出现:

%:用来代替零、一或多个字符

_: 用来代替一个单个字符


eg.从表中找到以a开头的客户名所在行数据

SELECT * FROM table_name WHERE CustomerName LIKE 'a%';

9. AS语句

用AS关键字创建别名,别名仅在该查询期间存在。

SELECT column_name AS alias_name FROM table_name;


别名在以下情况下很有用:

  • 查询涉及多个表

  • 在查询中使用函数

  • 列名很大或可读性很差

  • 两列或更多列合并在一起

10. JOIN语句

INNER JOIN:返回两个表中具有匹配值的记录

LEFT JOIN:返回与右表匹配的左表记录

RIGHT JOIN:返回与左表匹配的右表记录

FULL OUTER JOIN:返回与左表或右表中存在匹配项的所有记录

11. UNION语句

  • UNION中的每个SELECT语句必须具有相同的列数

  • 这些数列必须具有相似的数据类型

  • 每个SELECT语句中的数列也必须具有相同的顺序

UNION:仅显示无重复值数列;

UNION ALL:可显示所有数列

SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;

12. GROUP BY语句

GROUP BY将具有相同值的行分组统计

SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s);

13. CASE…WHEN语句

SELECT column_name(s)

CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END

FROM table_name;