SQL简单复习

最近看完了《SQL必知必会》,就是简单复习了SQL语句,概念比较少,但是觉得这本书还行,如果只是简单复习一下SQL语言的话。

1 简单介绍数据库

基本知道什么是模式,数据库和数据库管理软件(MySQL等)以及表之间的区别。记得所有的表都有一个主键,然后一般来说数据表之间都是有关系的。

2 简单检索数据

1
2
SELECT prod_id, prod_price, prod_name
FROM Products;

每一个列名之间用逗号分隔。如果只想要不同的值作为结果,可以用DISTINCT关键字,也可以用LIMIT来指定输出的列、利用OFFSET来说明偏移量。简单的注释是用--开头的,大段的注释和C语言一致。

3 排序数据

ORDER BY关键字可以指定用某个列来进行字典的排序,这里值得注意的是这个必须在最后一行出现。如果希望逆序,则可以使用DESC关键字。如果对于每个列都进行降序,需要为每个列都指定。

1
2
3
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2 DESC, prod_name;

4 过滤数据

可以利用WHERE来指定数据的条件。WHERE支持大于等于小于这种比较符,也支持BETWEEN ANDIS NULL这种操作符。

1
2
3
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5.99 AND 10;

5 高级数据过滤

组合WHERE语句可以使用 ANDOR语句。或者可以使用IN操作符来指定。

1
2
3
4
SELECT prod_id, prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01')
ORDER BY 3;

6 通配符的使用

百分号匹配0个或者任意多的字符,而下划线匹配唯一的一个,这里需要注意的是数据库一般都是空格结尾的,所以需要去掉空格或者在匹配的最后加一个百分号来匹配这些空格。

1
2
3
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear%';

这里注意最后用了百分比号,就是为了匹配最后的空格。

7 计算字段

简单来说就是把一些你操作好的新的字段名取个别名,这样之后操作起来比较方便。

1
2
SELECT Concat(prod_id ,' ',prod_name) AS prod_title 
FROM Products;

8 使用函数

函数这部分基本和基本的编程语言差不多,但是不同的数据库实现不同,所以只是看看就好了。但是其中有一个SOUNDEX()这个函数倒是非常有意思,就是能够判断两个名字的英文是不是读起来一样的。

1
2
SELECT prod_name, UPPER(prod_name) AS upper_prod_name
FROM Products;

9 数据聚集

简单来说是五个聚集函数,分别是AVGCOUNTMAXMINSUM,使用起来都非常简单。

1
2
3
SELECT AVG(item_price) AS avg_item_price
FROM OrderItems
WHERE order_num = 20006;

10 数据分组

对于某个特别的条件(比如根据性别),我们可以对数据进行分组,然后对于每个分组分别进行筛选。

1
2
3
SELECT vend_id, COUNT(*)
FROM Products
GROUP BY vend_id;

会计算出每个vend_id对应产品的数量。

与此同时,还提供了过滤的语句,用HAVING来表示,因为WHERE已经被用了。

1
2
3
4
SELECT cust_id, COUNT(*)
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >=2;

HAVING的条件和WHERE完全通用。

总结一下SELECT语句的顺序:

  • SELECT
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

11 子查询

就是用一个查询的结果作为另外一个查询的结果:

1
2
3
4
5
6
7
SELECT cust_id
FROM Orders
WHERE order_num IN (
SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'
);

12 联结

联结基本理解就是用一个公共的列(外键)联结两个表或者多个表,然后对这些表进行统一的查询。

1
2
3
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;

上面就是用vend_id这个外键来对两个数据表进行了联结,这样查找起来就方便多了。

13 高级联结

关于联结,这里有篇文章写得非常好。

14 组合查询

UNION语句来进行组合,还是非常简单的。值得注意的UNION语句会删除重复的语句。

15 插入数据

1
INSERT INTO TABLE_NAME(col1,col2,col3) VALUES('a',123,'c');
1
2
3
INSERT INTO TABLE_NAME(col1,col2,col3)
SELECT col1,col2,col3
FROM OTHER_TABLE_NAME;

第一个例子是最简单的插入,第二个是从另外一个表里查询数据然后全部插入到新的表里。

16 更新与删除

这部分应该是最简单的,但是注意的是更新的时候要注意主键的问题和删除的时候可能会有外键的问题。还有一个温馨的提示是一定要使用WHERE子句,否则么,就是数据丢失呗。

更新的示例:

1
2
3
UPDATE Customers
SET cust_email = 'test@email.com'
WHERE cust_id = '123';

删除的示例:

1
2
DELETE FROM Customers
WHERE cust_id = '123';

17 创建和修改表

创建表:

1
2
3
4
5
6
CREATE TABLE TABLE_NAME
(
prod_id CHAR(10) NOT NULL,
prod_price DECIMAL(8,2),
prod_num INTEGER NOT NULL, DEFAULT 1
);

删除表:

1
DROP TABLE TABLE_NAME;

复制表:

1
2
CREATE TABLE Cust_Copy AS
SELECT * FROM Customers;

More

之后书还介绍了一下视图、存储过程、事务的管理和游标,我感觉介绍的比较简单,然而这些对于学习数据库是非常重要的,然而对于我目前的使用来说是足够了,所以暂时不收录在其中了。