[SQL] SQL 基础知识梳理 - 查询基础
Posted 反骨仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SQL] SQL 基础知识梳理 - 查询基础相关的知识,希望对你有一定的参考价值。
SQL 基础知识梳理(二) - 查询基础
【博主】反骨仔 【原文】http://www.cnblogs.com/liqingwen/p/5904824.html
序
这是《SQL 基础知识梳理(一)- 数据库与 SQL》的下篇。
目录
一、SELECT 语句基础
1.查询指定列:SELECT 关键字
--语法: --SELECT <列名>, ... -- 希望查询列的名称 --FROM <表名> -- 指定选取数据的表
-- 从 Shohin 中取 3 列 SELECT shohin_id, shohin_mei, hanbai_tanka -- 列的顺序可以任意指定,逗号(“,”)分隔,查询结果的顺序和 SELECT 子句中的顺序相同 FROM Shohin;
2.查询表的所有列:星号(*)
--语法 --SELECT * -- 星号(*)代表所有列 --FROM <表名>;
【备注】使用星号(*)的话就无法设定列的显示顺序
3.为列设定别名:AS 关键字
SELECT shohin_id AS Id, shohin_mei AS Name, shiire_tanka Price FROM Shohin; -- 不用 AS 关键字也可以
SELECT shohin_id AS "编号", shohin_mei AS \'名称\', shiire_tanka \'价格\' FROM Shohin; -- 设定汉语别名:加上双引号(")或单引号(\')
4.常数的查询
SELECT \'产品\' AS Product, -- \'产品\':字符串常数 38 AS Price, -- 38:数字常数 \'2016-09-30\' AS \'生产日期\' -- \'2009-02-24\':日期常数
【备注】字符串和日期使用单引号(\')。
5.从结果中删除重复行:DISTINCT
原图
(1)
SELECT DISTINCT shohin_bunrui FROM dbo.Shohin; -
使用 DISTINCT 移除 shohin_bunrui 列中的重复数据
(2)DISTINCT 对 NULL 类型的处理:存在多条 NULL 值的行时,会结合为一条 NULL 数据。
SELECT DISTINCT shiire_tanka FROM dbo.Shohin;
(3)多列之前使用 DISTINCT
SELECT DISTINCT shohin_bunrui, torokubi FROM dbo.Shohin
DISTINCT 会将多个列的数据进行组合,将重复的数据结合为一条。
【注意】DISTINCT 关键字只能用在第一个列名之前。
6.筛选记录:WHERE
WHERE 子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件,找出只符合该条件的记录。
--语法: --SELECT <列名>, ... --FROM <表名> --WHERE <条件表达式>;
SELECT shohin_id, shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE shohin_bunrui = \'衣服\'; -- shohin_bunrui = \'衣服\':为条件表达式
选取行之后,再输出列
【备注】WHERE 子句:首先通过该子句查询出符合指定条件的记录,再选取出 SELECT 语句指定的列。
【注意】SQL 子句的书写格式是固定的,不能随意更改。如 WHERE 子句必须紧跟在 FROM 子句后。
7.注释的写法
注释对于 SQL 的执行没有任何影响。
-- 单行注释 /* 多行注释 */
二、算术运算符和比较运算符
1.算术运算符
SELECT shohin_mei, hanbai_tanka, hanbai_tanka * 2 AS \'hanbai_tanka_x2\' FROM dbo.Shohin;
图 商品单价的两倍
含义 | 运算符 |
加法 | + |
减法 | - |
乘法 | * |
除法 | / |
括号(“(”“)”)可以提高表达式的优先级。
2.需要注意 NULL
SELECT 5 + NULL, 10 - NULL, 1 * NULL, 4 / NULL, NULL / 9;
【备注】所有包含 NULL 的计算,结果肯定为 NULL。
3.比较运算符
运算符 | 含义 |
= | 相等 |
<> | 不等 |
>= | 大于等于 |
> | 大于 |
<= | 小于等于 |
< | 小于 |
--示例1:
SELECT shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE hanbai_tanka = 500;
选取 hanbai_tanka 列为 500 的记录
--示例2
SELECT shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE hanbai_tanka <> 500;
--示例3
SELECT shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE hanbai_tanka != 500;
选取 hanbai_tanka 列的值不是 500 的记录
--示例4
SELECT * FROM dbo.Shohin WHERE hanbai_tanka - shiire_tanka >= 500;
3.对字符串使用不等号时的注意事项
-- DDL:创建表 CREATE TABLE Chars (chr CHAR(3) NOT NULL, PRIMARY KEY (chr)); -- DML:插入数据 INSERT INTO Chars VALUES (\'1\'); INSERT INTO Chars VALUES (\'2\'); INSERT INTO Chars VALUES (\'3\'); INSERT INTO Chars VALUES (\'10\'); INSERT INTO Chars VALUES (\'11\'); INSERT INTO Chars VALUES (\'222\');
原图
--示例:选取出大于\'2\'的数据的 SELECT 语句 SELECT * FROM dbo.Chars WHERE chr > \'2\';
【注意】chr 为字符串类型,对字符串类型的数据进行大小比较时,跟数字不一样。
4.不能对 NULL 使用比较运算符
--示例1: SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shiire_tanka = NULL; --错误的 SELECT 语句 --示例2 SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shiire_tanka IS NULL; --选取 NULL 的记录 --示例3 SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shiire_tanka IS NOT NULL; --选取不为 NULL 的记录
【注意】希望选取 NULL 记录时,使用 IS NULL;希望选取不是 NULL 的记录时,使用 IS NOT NULL。
三、逻辑运算符
1.NOT 运算符:取反
--示例:
SELECT * FROM dbo.Shohin WHERE NOT hanbai_tanka >= 1000; --等价于 hanbai_tanka < 1000
取 hanbai_tanka 列不大于 1000 的记录(hanbai_tanka < 1000)
2.AND 运算符和 OR 运算符
AND 运算符:并且,在两侧的查询条件都成立时整个查询条件才成立。
OR 运算符:在两侧的查询条件就算只有一个成立时整个查询条件都成立。
--示例
SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shohin_bunrui = \'厨房用具\' AND hanbai_tanka >= 3000;
SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shohin_bunrui = \'厨房用具\' OR hanbai_tanka >= 3000;
【备注】多个查询条件进行组合时,需要使用 AND 运算符或者 OR 运算符。
2.通过括号进行强化
--示例1
SELECT shohin_mei, shohin_bunrui, torokubi FROM dbo.Shohin WHERE shohin_bunrui = \'办公用品\' AND torokubi = \'2009-09-11\' OR torokubi = \'2009-09-20\';
--示例2 SELECT shohin_mei, shohin_bunrui, torokubi FROM dbo.Shohin WHERE shohin_bunrui = \'办公用品\' AND (torokubi = \'2009-09-11\' OR torokubi = \'2009-09-20\');
【备注】AND 运算优先于 OR 运算,想要优先执行 OR 运算时可以使用括号。
传送门
备注
这里的语句采用 SQL Server 进行验证。
CREATE TABLE Shohin (shohin_id CHAR(4) NOT NULL, shohin_mei VARCHAR(100) NOT NULL, shohin_bunrui VARCHAR(32) NOT NULL, hanbai_tanka INTEGER , shiire_tanka INTEGER , torokubi DATE , PRIMARY KEY (shohin_id)); INSERT INTO Shohin VALUES (\'0001\', \'T恤\' ,\'衣服\', 1000, 500, \'2009-09-20\'); INSERT INTO Shohin VALUES (\'0002\', \'打孔器\', \'办公用品\', 500, 320, \'2009-09-11\'); INSERT INTO Shohin VALUES (\'0003\', \'运动T恤\', \'衣服\', 4000, 2800, NULL); INSERT INTO Shohin VALUES (\'0004\', \'菜刀\', \'厨房用具\', 3000, 2800, \'2009-09-20\'); INSERT INTO Shohin VALUES (\'0005\', \'高压锅\', \'厨房用具\', 6800, 5000, \'2009-01-15\'); INSERT INTO Shohin VALUES (\'0006\', \'叉子\', \'厨房用具\', 500, NULL, \'2009-09-20\'); INSERT INTO Shohin VALUES (\'0007\', \'擦菜板\', \'厨房用具\', 880, 790, \'2008-04-28\'); INSERT INTO Shohin VALUES (\'0008\', \'圆珠笔\', \'办公用品\', 100, NULL, \'2009-11-11\');
【参考】《SQL ゼロからはじめるデータベース操作》
以上是关于[SQL] SQL 基础知识梳理 - 查询基础的主要内容,如果未能解决你的问题,请参考以下文章