SELECT语句基础
列的查询:通过SELECT 语句查询并选取出必要数据的过程称为匹配查询或查询。
--SELECT的基本语句
SELECT 列名1,...
FROM 表名;
解释1:SELECT子句中列举了希望从表中查询出的列的名称,其顺序可以任意指定,多个列名直接用逗号分隔排列,查询结果中列的顺序与其子句顺序相同。当要查询全部列时,可以用
星号(*)表示。
使用星号时,就无法设定列的显示顺序了。
--查询全部列
SELECT *
FROM 表名
解释2:FROM子句指定了选取出数据的表的名称
为列设定别名:使用关键字 AS,设定汉语别名时要用双引号(" ")括起来
SELECT 列名 AS 列别名
FROM 表名
常数的查询:
SELECT '字符串常数' AS 别名, 数字常数 AS 别名, '日期常数' AS 别名
FROM 表名;
SELECT DISTINCT 列名
FROM 表名;
注意:在使用DISTINCT时,NULL也被视为一类数据。在多个列之前使用,此时会将多个列的数据进行组合,将重复的数据结合为一条。 DISTINCT只能用在第一个列名之前。
根据WHERE语句来选择记录:
WHERE子句可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。
--SELECT语句中的WHERE子句语法
SELECT 列名1,列名2,...
FROM 表名
WHERE 表达式条件;
解释: 首先通过WHERE子句查询出符合指定条件的记录,然后再取出SELECT语句指定的列
注意:SQL中子句的书写顺序是固定的,不能随意更改。即WHERE子句要紧跟在FROM子句之后。
关于SQL语句的注释:
单行注释:将注释内容写在“ -- ”之后
多行注释:将注释内容写在“ /* ”和“ */ ”之间
算术运算符和比较运算符
算术运算符:使用其两边的值进行四则运算(+、-、*、/)或者字符串拼接、数值大小比较等运算,并返回结果的符号。运算是以行为单位进行的。也可以使用括号来提升表达式的优先级。
--将表Shop中的price乘以2
SELECT products,price,price*2 AS "price_X2"
FROM Shop
注意:
所有包含NULL的计算,结果肯定为NULL
比较运算符:像符号=、< >(不等于)、<=、<、>=、>这样用来比较其两边的列或者值的符号,几乎所有数据类型(字符、数字、日期等)的列和值都可以用比较运算符进行比较,当然也可以对计算结果进行比较。
对字符串使用不等号时的注意事项:
对字符串类型的数据进行大小比较时,使用的是和数字比较不同的规则,典型的规则就是按照字典顺序进行比较。
- -DDL 创建一个字符表str
CREATE TABLE Str
(string VARCHAR(4) NOT NULL,
PRIMARY KEY(string));
- -DML 向表中插入数
BEGIN TRANSACTION;
INSERT INTO Str VALUES('1'),
INSERT INTO Str VALUES('2'),
INSERT INTO Str VALUES('3'),
INSERT INTO Str VALUES('10'),
INSERT INTO Str VALUES('11'),
INSERT INTO Str VALUES('222');
COMMIT;
SELECT string
FROM Str
WHERE Str>'2';
解释:因为其按照字典顺序进行比较,所以输出结果只显示:3,222
不能对NULL使用比较运算符,SQL提供了专门用来判断是否为NULL的运算符IS NULL;希望选取不是NULL的记录时,需要使用IS NOT NULL
- -查询Products表中价格为空的产品名
SELECT name
FROM Products
WHERE price IS NULL
逻辑运算符
NOT运算符:表示否定,不能单独使用,必须和其他查询条件组合起来使用,不要滥用
--Sample
SELECT name,price
FROM Products
WHERE NOT price>=100;
--等价于
SELECT name,price
FROM Products
WHERE price<100;
AND运算符和OR运算符:主要用于多个查询条件进行组合时
AND运算符在其两侧的查询条件都成立时整个查询条件才成立,为交集的效果(又称逻辑积运算)
SELECT name,price
FROM Products
WHERE name='筷子'
AND price>20;
解释:选出Products表中产品名为“筷子”
且售价大于20的行;
OR运算符在其两侧的查询条件有一个成立时整个查询条件都成立,为并集的效果(又称逻辑和运算)
SELECT name,price
FROM Products
WHERE name='筷子'
OR price>20;
解释:
选出Products表中产品名为“筷子”或售价大于20的行;
注意:AND的运算优先级高于OR,如果要先优先执行OR运算只能通过添加括号。
逻辑运算符和真值:
真值,即值为真(TRUE)或假(FALSE)之一,在SQL中还存在“不确定(UNKNOWN)”这样的值
AND运算符两侧都为真时,结果为真,否则为假;OR运算符两侧都为假时,结果为假,否则为真;NOT运算符单纯的取反,即将真转换为假,将假转换为真。
当与NULL进行逻辑运算时,其结果为不确定