SQL编写规则
- 关键字大写,非关键字小写。SQL 是 不区分大小写 的,但推荐关键字 大写,从而与表名、列名等信息区分开来;
- 一条子句占据一行,过长可换行。SQL 是 忽略空格与换行 的,但我们推荐一条子句占据一行(若子句过长也可根据情况换行),使代码结构更清晰;
- 一条完整的 SQL 语句后,需要加上一个英文分号
;
,表明语句的结束。- SQL 中可以用两个中划线
--
在代码中添加 注释,注释中的内容 不会被执行。
1、SELECT语句--从指定数据表中选择若干字段
- SELECT name(字段名)
- FROM staff;(表名)
数据库管理软件在运行 SQL 语句时,会 忽略 所有多余空白字符,比如空格、换行等等。也就是说,SQL 语句可以写成长长的一行,也可以分散着写在多行里。-- 写法一: SELECT name FROM staff; -- 写法二: SELECT name FROM staff; -- 写法三: SELECT name FROM staff;
1、运用
SELECT ... FROM ...
子句,让 SQLite 把staff
数据表中的name
列挑选出来:SELECT name FROM staff;
2、如果从
staff
数据表中选择出name
、age
和hire_date
这三列的话,只需要把这三列的名字作为待选字段,依次写在SELECT
关键字后面,列名与列名之间用英文逗号,
隔开即可。提示:为了方便阅读,逗号
,
后最好加上一个空格。最后一个列名后面不可以加逗号SELECT name, age, hire_date
FROM staff;
3、那如果想选择一张数据表中的 所有列 该怎么办?
SELECT *
FROM staff;
第一行中的符号
*
表示“所有” 的含义。这种选择所有列的方法,不需要指定列名,因此实际应用中,我们常常用该方法快速认识一张陌生的数据表。
2、DISTINCT
那该如何在目前查询结果的基础上,把那些重复出现的部门名剔除掉呢?
这就需要一个新的关键字——DISTINCT 关键字来帮忙了。单词 distinct 本身就有“独特”的含义,放到 SQL 中,DISTINCT关键字表明在选择时,只保留 首次 出现的组合,在位置上,则需要紧紧跟在
SELECT
关键字之后。当我们指定用 DISTINCT 模式进行选择时,那么 SQLite 会把首次出现的 部门、职位组合 记录下来,剔除掉重复的组合
3、WHERE子句--按给定条件筛选数据
- SELECT 字段名
- FROM 表名
- WHERE 筛选条件;
WHERE 子句跟在 FROM子句之后
SELECT event_name, site, event_type FROM events WHERE event_name = '蓝莓音乐节';
- 这条语句的含义是:在
events
表中,找到名为“蓝莓音乐节”的演出,并返回对应行中event_name
、site
、event_type
这三列的数据。- 这里的筛选条件:
event_name = '蓝莓音乐节'
,意思是event_name
列的值与'蓝莓音乐节'
相等。
4、BETWEEN 操作符--筛选所有在给定连续范围内的值
- WHERE 受条件约束的字段 (eg:price)
- BETWEEN 范围最小值 AND 范围最大值(构成了连续的数值范围)
--数值筛选:筛选出 price 列的值大于等于 100,小于等于 200 的行 --AND 左右的两个数字构成了一个连续的数值区间,作为查询范围 SELECT * FROM events WHERE price BETWEEN 100 AND 200; --日期筛选:在 events 表中筛选出所有 10 月期间的演出,并返回所有列的信息 SELECT * FROM events WHERE event_time BETWEEN '2021-10-01' AND '2021-10-31';
5、LIKE操作符--按搜索模式筛选文本
- WHERE 受条件约束的字段(eg:venue)
- LIKE "北京-%'; (文本搜索模式)
--文本筛选 SELECT * FROM events WHERE site LIKE '北京-%'; --筛选所有在 event_name 列的文本中包含“派大星”三个字的行 --并返回 event_name、event_time、site 和 price 四列的信息 SELECT event_name, event_time, site, price FROM events WHERE event_name LIKE '%派大星%'; --高级筛选 --AND 操作符 --从 events 表中筛选出所有价格小于 300 元的音乐会。 SELECT * FROM events WHERE event_type = '音乐会' AND price < 300; --OR 操作符 --筛选出 events 表中 2021 年 10 月或 12 月的所有演出 SELECT * FROM events WHERE event_time BETWEEN '2021-10-01' AND '2021-10-31' OR event_time BETWEEN '2021-12-01' AND '2021-12-31'; --NOT 操作符 --筛选出 events 表中 不在 北京举办的演出 SELECT * FROM events WHERE NOT site LIKE '北京-%';
6、IN操作符--筛选所有在给定离散范围内的值
- WHERE 受条件约束的字段(eg:price)
- IN (100, 200, 300);(不同的值用逗号隔开,允许值的范围用括号包裹)
--从 events 表中,筛选出在 北京-糖果大楼、上海-人民体育场 和 广州-蓓蕾剧院 举办的演出 SELECT * FROM events WHERE site IN ('北京-糖果大楼', '上海-人民体育场', '广州-蓓蕾剧院');
用
NOT
与IN
操作符一起,组成NOT IN
,用于筛选出某一列的值不在某个范围内的数据。