查询基础
前言
系统学习SQL的笔记,用于记录学习过程。
整体思维导图
列的查询
从表中选取数据是需要使用SELECT语句,通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)
语法2.1 基本的SELECT语句
SELECT <列名>, …… FROM <表名>;
该SELECT语句包含SELECT和FROM两个子句(clause)。子句是SQL语句的组成要素,是以SELECT或者FROM等作为起始的短语。
SELECT子句中列举了希望从表中查询出的列的名称,而FROM子句则指出选择出数据的表的名称。
代码示例:从Product表中输出3列
SELECT product_id, product_name, purchase_price FROM Product;
执行结果
SELECT语句第一行的SELECT product_id, product_name, purchase_price就是SELECT子句。查询出的列的顺序可以任意指定。查询多列时,需要使用逗号进行分隔。查询结果中列的顺序和SELECT子句中的顺序相同。
查询出所有的列
想要查询出全部列是,可以使用代表所有列的星号(*)
语法2.2 查询全部的列
SELECT * FROM <表名>;
代码示例2.2 输出Product表中全部的列
SELECT * FROM Product;
执行结果
注意:星号(*)代表全部列的意思。但是,如果使用星号的话,就无法设定列的显示顺序了。这时就会按照CREATE TABLE语句的定义对列进行排序。
为列设置别名
SQL语句可以使用AS关键字为列设定别名。
代码示例2.3 为列设置别名
SELECT product_id AS id, product_name AS `name`, purchase_price AS price FROM Product;
执行结果
代码示例2.4 设置中文别名
SELECT product_id AS "商品编号", product_name AS "商品名称", purchase_price AS "进货单价" FROM Product;
通过执行结果就可以知道相对于英文别名来说,会更好理解与操作。
执行结果
注意:设定汉语别名时需要使用双引号(")括起来。
常数的查询
SELECT子句不仅可以书写列名,还可以书写常数。
代码示例2.5 查询常数
SELECT '商品' AS string, 38 AS number, '2009-02-24' AS date, product_id, product_name FROM Product;
执行结果
从结果中删除重复行
想要删除重复行时,可以通过在SELECT子句中使用DISTINCT来实现
代码示例2.6 使用DISTINCT删除product_type列中重复的数据
SELECT DISTINCT product_type FROM Product;
执行结果
注意:在SELECT语句中使用DISTINCT可以删除重复行。
在使用DISTINCT时,NULL也被视为一类数据。NULL存在于多行中时,也会被合并为一条NULL数据。
代码示例2.7 在多列之前使用DISTINCT
SELECT DISTINCT product_type, regist_date FROM Product;
执行结果
注意:DISTINCT关键字只能用在第一个列名之前,因此,请大家注意不能写成regist_date, DISTINCT product_type。
根据WHERE语句来选择记录
SELECT语句通过WHERE子句来指定查询数据的条件。
语法示例2.3 SELECT语句中的WHERE子句
SELECT <列名>, …… FROM <表名> WHERE <条件表达式>;
代码示例2.8 用来选取product_type列为’衣服’的记录的SELECT语句
SELECT product_name, product_type FROM Product WHERE product_type = '衣服';
执行结果
通过WHERE子句查询出符合指定条件的记录,然后再选取出SELECT语句指定的列。注意:SQL中子句的书写顺序是固定的,不能随意更改。WHERE子句必须紧跟在FROM子句之后,书写顺序发生改变的话会造成执行错误。