SQL基础查询

参考资料: 《SQL基础教程》

基础查询

数据准备

在查询数据之前,需要往数据库里插入需要用到的数据。

1.创建数据库

-- 创建数据库shop
CREATE DATABASE shop;

2.创建表 使用数据库shop:

USE shop;

在数据库Shop中创建表:

CREATE TABLE Product
(product_id       CHAR(4)        NOT NULL,
 product_name     VARCHAR(100)   NOT NULL,
 product_type     VARCHAR(32)    NOT NULL,
 sale_price       INTEGER        ,
 purchase_price   INTEGER        ,
 regist_date      DATE           ,
 PRIMARY KEY (product_id));

3.插入数据

INSERT INTO Product VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

COMMIT;

经过上面的操作,我们已经准备好了后面需要用到的数据表。

Product表

SELECT语句基础

列的查询

SELECT语句,从表中选取(SELECT)数据。

基本的SELECT语句

SELECT <列名>, ...
FROM <表名>

包含了两个子句:

  • SELECT子句:列出了希望从表中查询出的列的名称;
  • FROM子句:指定了选取出数据的表的名称。

从Product表中输出3列

SELECT
    product_id, 
    product_name,
    purchase_price
FROM Product;

执行结果:

查询出表中所有的列

想要查询出全部列,可以使用代表所有列的星号(*)

查询全部的列

SELECT *
FROM <表名>;

输出Product表中全部的列

SELECT *
FROM Product;

和以上代码具有相同意义的语句:

SELECT
    product_id,
    product_name,
    product_type,
    sale_price,
    purchase_price,
    regist_date
FROM Product;

执行结果:

但是,如果使用星号,就无法设定列的显示顺序了。

为列设定别名

可以使用AS关键字为列设定别名AS关键字也可以省略。

为列设定别名

SELECT
    product_id AS id,
    product_name AS name,
    purchase_price AS price
FROM Product;

执行结果:

别名可以使用中文,使用中文时需要用双括号("")括起来。

设定中文别名

SELECT
    product_id AS "商品编号",
    product_name AS "商品名称",
    purchase_price AS "进货单价"
FROM Product;

执行结果:

常数的查询

SELECT子句中不仅可以书写列名,还可以书写常数。

查询常数

SELECT
    '商品' AS string,
    38 AS number,
    '2009-02-24' AS date,
    product_id,
    product_name
FROM Product;

执行结果:

从结果中删除重复行

想要删除重复行,可以在SELECT子句中使用DISTINCT来实现。

使用DISTINCT删除product_type列中重复的数据

SELECT DISTINCT product_type
FROM Product;

执行结果:

对含有NULL数据的列使用DISTINCT关键字 NULL也被视为一类数据,如果存在多行NULL时,将被合并成一行。

SELECT DISTINCT purchase_price
FROM Product;

执行结果:

在多列之前使用DISTINCT

SELECT 
    DISTINCT product_type,
             regist_date
FROM Product;

没使用DISTINCT关键字的情况:

执行结果:

可以看出,DISTINCT关键字会将product_type列和regist_data列都相同的数据合并为一条。 注意:DISTINCT关键字只能用在第一个列名之前

WHERE语句选择记录

WHERE子句可以指定查询数据的条件。

SELECT语句中的WHERE子句

SELECT <列名>, ...
FROM <表名>
WHERE <条件表达式>;

选取product_type列为‘衣服’的数据

SELECT 
    product_name,
    product_type
FROM Product
WHERE product_type = '衣服';

执行结果:

SQL顺序

  • 书写顺序:SELECT ——> FROM ——> WHERE
  • 执行顺序:FROM ——> WHERE ——> SELECT

注释

注释是SQL语句中用来标识说明或注意事项的部分,注释对SQL的执行没有任何影响。 注释的书写方法有如下两种:

  1. 单行注释
-- 这是单行注释,只能写在同一行,注意“--”之后有一个空格。
  1. 多行注释
/*
这是多行注释,书写在‘/*’和‘*/’之间;
可以跨多行。
*/

运算符

运算符:就是对其两边的的列或者值进行运算的符号。

算数运算符

算数运算符:可以进行四则运算的运算符。

SQL语句中使用运算表达式

SELECT 
    product_name,
    sale_price,
    sale_price*2 AS 'sale_price_x2'
FROM Product

执行结果:

注意NULL 所有包含NULL的计算,结果肯定是NULL!。

只包含SELECT子句的SELECT语句 FROM子句并非必不可少,只使用SELECT子句进行计算也是可以的。

SELECT (100 + 200)*3 AS calculation;

执行结果:

比较运算符

比较运算符:用来比较其两边的列或者值的符号。

比较运算符

含义

=

和~相等

<>

和~不等

>=

大于等于~

>

大于~

<=

小于等于~

<

小于~

比较运算符可以对字符、数字和日期等几乎所有数据类型的列和值进行比较。

选出登记日期在2009年9月27日之前的记录 小于某个日期就是在该日期之前的意思。

SELECT
    product_name,
    product_type,
    regist_date
FROM Product
WHERE regist_date < '2009-09-27';

执行结果:

对字符串使用不等式时的注意事项

创建Chars表并插入数据

-- 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');

COMMIT;

[图片上传失败...(image-5eb355-1558878011527)]

选出大于‘2’的数据

SELECT chr
FROM Chars
WHERE chr > '2';

执行结果:

对字符串类型的数据进行大小比较时,使用的是和数字比较不同的规则,典型的规则是按照字典顺序进行比较的。

不能对NULL使用比较运算符

我们不能通过使用比较运算符,来判断是否为NULL,SQL专门提供了是否为NULLIS NULL运算符

选取NULL的记录

SELECT
    product_name,
    purchase_price
FROM Product
WHERE purchase_price IS NULL;

执行结果;

反之,希望选取不是NULL的记录时,需要使用IS NOT NULL运算符

逻辑运算符

逻辑运算符

含义

NOT

不是~

AND

并且,在其两侧的查询条件都成立时,整个查询条件才成立

OR

或者,在其两侧的查询条件有一个成立时,整个查询条件都成立

查询条件中使用NOT

SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE NOT sale_price >= 1000;

执行结果:

上面的SQL的查询条件和以下SQL的查询条件是等价的:

SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE sale_price < 1000;

查询条件中使用AND

SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE
    product_type = '厨房用具' 
AND sale_price >= 3000;

执行结果:

查询条件中使用OR

SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE
    product_type = '厨房用具' 
 OR sale_price >= 3000;

执行结果:

使用括号 注意:AND运算符的优先级高于OR运算符,想要优先执行OR运算符时可以使用括号。

逻辑运算符和真值 真值就是值为真(TRUE)假(FALSE)不确定(UNKNOWN)其中之一的值。SQL之外的语言基本上只有真假两种真值,只有SQL中有第三种值——不确定(UNKNOWN)。 当对NULL进行逻辑运算时,其结果是不确定(UNKNOWN),这就是不能对NULL值使用不等式的原因。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券