读书笔记

《SQL基础教程》阅读笔记3

2018-11-18  本文已影响7人  Athenaearl

查询基础

一.SELECT 语句基础

列的查询

格式:

SELECT <column_name1>,<column_name2>.....FROM <table_name>;

示例:

mysql> SELECT product_id, product_name, purchase_price FROM Product;
+------------+--------------+----------------+
| product_id | product_name | purchase_price |
+------------+--------------+----------------+
| 0001       | T恤衫        |            500 |
| 0002       | 打孔机       |            320 |
| 0003       | 运动T恤      |           2800 |
| 0004       | 菜刀         |           2800 |
| 0005       | 高压锅       |           5000 |
| 0006       | 叉子         |           NULL |
| 0007       | 擦菜板       |            790 |
| 0008       | 圆珠笔       |           NULL |
+------------+--------------+----------------+
8 rows in set (0.01 sec)

说明:
列出来的顺序即是查询时候的顺序
比如:select 后面 先查的id,然后是name,最后是price,列表则是按照这个顺序列出数据

查询出表中的所有列

格式:

SELECT * FROM Product;

说明:本质上没有什么区别,只不过是用 * 来代替所有的类别名
示例:

mysql> SELECT * FROM Product;-
+------------+--------------+--------------+------------+----------------+-------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
+------------+--------------+--------------+------------+----------------+-------------+
| 0001       | T恤衫        | 衣服         |       1000 |            500 | 2009-09-20  |
| 0002       | 打孔机       | 办公用品     |        500 |            320 | 2009-09-11  |
| 0003       | 运动T恤      | 衣服         |       4000 |           2800 | NULL        |
| 0004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-20  |
| 0005       | 高压锅       | 厨房用具     |       6800 |           5000 | 2009-01-15  |
| 0006       | 叉子         | 厨房用具     |        500 |           NULL | 2009-09-20  |
| 0007       | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-28  |
| 0008       | 圆珠笔       | 办公用品     |        100 |           NULL | 2009-11-11  |
+------------+--------------+--------------+------------+----------------+-------------+
8 rows in set (0.00 sec)

为列设置别名

格式:

SELECT <column_name1> AS <new_name1>, <column_name2> AS <new_name2>,....FROM <table_name>;

示例:

mysql> SELECT product_id AS id, product_name AS name, purchase_price AS price FROM Product;
+------+------------+-------+
| id   | name       | price |
+------+------------+-------+
| 0001 | T恤衫      |   500 |
| 0002 | 打孔机     |   320 |
| 0003 | 运动T恤    |  2800 |
| 0004 | 菜刀       |  2800 |
| 0005 | 高压锅     |  5000 |
| 0006 | 叉子       |  NULL |
| 0007 | 擦菜板     |   790 |
| 0008 | 圆珠笔     |  NULL |
+------+------------+-------+
8 rows in set (0.00 sec)

说明:其实就是查找之后,表示的时候用一个别名来展示

常数的书写

示例:

mysql> SELECT 'hello' AS haha , product_id FROM Product;
+-------+------------+
| haha  | product_id |
+-------+------------+
| hello | 0001       |
| hello | 0002       |
| hello | 0003       |
| hello | 0004       |
| hello | 0005       |
| hello | 0006       |
| hello | 0007       |
| hello | 0008       |
+-------+------------+
8 rows in set (0.00 sec)

说明:
临时加一列,这一列名叫做 haha,它的值统一是 hello

单独这么做显然没有什么意义,但是如下这样就意义就更多了

mysql> SELECT Product_id, Product_name, sale_price, sale_price * 2 AS sale_price_X2 FROM Product;
+------------+--------------+------------+---------------+
| Product_id | Product_name | sale_price | sale_price_X2 |
+------------+--------------+------------+---------------+
| 0001       | T恤衫        |       1000 |          2000 |
| 0002       | 打孔机       |        500 |          1000 |
| 0003       | 运动T恤      |       4000 |          8000 |
| 0004       | 菜刀         |       3000 |          6000 |
| 0005       | 高压锅       |       6800 |         13600 |
| 0006       | 叉子         |        500 |          1000 |
| 0007       | 擦菜板       |        880 |          1760 |
| 0008       | 圆珠笔       |        100 |           200 |
+------------+--------------+------------+---------------+
8 rows in set (0.00 sec)

运算符号:+ - * / 支持 ()
运算中所有和NULL有关的结果都是NULL

修改列名:

mysql> ALTER TABLE  ProductCopy CHANGE prouduct_type product_type VARCHAR(32) NOT NULL;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

避免输出结果中有重复项

如果直接打印product_type 效果如下:

mysql> SELECT product_type FROM Product;
+--------------+
| product_type |
+--------------+
| 衣服         |
| 办公用品     |
| 衣服         |
| 厨房用具     |
| 厨房用具     |
| 厨房用具     |
| 厨房用具     |
| 办公用品     |
+--------------+
8 rows in set (0.00 sec)

会发现有很多重复项,但是我只是想知道,这里面有几类数据
就会用到DISTINCT关键字
效果如下:

mysql> SELECT DISTINCT product_type FROM Product;
+--------------+
| product_type |
+--------------+
| 衣服         |
| 办公用品     |
| 厨房用具     |
+--------------+
3 rows in set (0.01 sec)

注意:

  1. NULL也被认为是一种类别
  2. DISTINCT 只能修饰一个列名,当有多列的时候,同样只会修饰一列

根据WHERE 语句来选择记录

格式:

SELECT <column_name1>, <column_name2>... FROM <table_name> WHERE <condition>;

示例:

mysql> SELECT product_type, product_name FROM Product WHERE product_id=0001;
+--------------+--------------+
| product_type | product_name |
+--------------+--------------+
| 衣服         | T恤衫        |
+--------------+--------------+
1 row in set (0.01 sec)

注意:
这里的等号表达的是比较关系而非赋值关系
这个条件不一定非的是用主键才可以,product_name...都可以
比如:

mysql> SELECT product_id, product_name FROM Product WHERE product_type='厨房用具';
+------------+--------------+
| product_id | product_name |
+------------+--------------+
| 0004       | 菜刀         |
| 0005       | 高压锅       |
| 0006       | 叉子         |
| 0007       | 擦菜板       |
+------------+--------------+
4 rows in set (0.00 sec)

注意:
用中文的时候注意要用单引号将其括起来

比较运算符:

字符串之间的比较是按照字典序比较
与NULL做比较是不可以的,因此,有专门判断是否是NULL的条件
IS NULL
IS NOT NULL

逻辑运算符

不确定代表的是非真非假,因此 不确定 或者 NOT 不确定 都为 FALSE

注释

单行注释:

-- 这是注释

多行注释:

/*
这是
注释
*/
上一篇 下一篇

猜你喜欢

热点阅读