前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL基础查询

SQL基础查询

作者头像
活用数据
发布2019-06-03 16:48:17
2.2K0
发布2019-06-03 16:48:17
举报
文章被收录于专栏:数据医生专栏数据医生专栏

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

基础查询

数据准备

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

1.创建数据库

代码语言:javascript
复制
-- 创建数据库shop
CREATE DATABASE shop;

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

代码语言:javascript
复制
USE shop;

在数据库Shop中创建表:

代码语言:javascript
复制
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.插入数据

代码语言:javascript
复制
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语句

代码语言:javascript
复制
SELECT <列名>, ...
FROM <表名>

包含了两个子句:

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

从Product表中输出3列

代码语言:javascript
复制
SELECT
    product_id, 
    product_name,
    purchase_price
FROM Product;

执行结果:

查询出表中所有的列

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

查询全部的列

代码语言:javascript
复制
SELECT *
FROM <表名>;

输出Product表中全部的列

代码语言:javascript
复制
SELECT *
FROM Product;

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

代码语言:javascript
复制
SELECT
    product_id,
    product_name,
    product_type,
    sale_price,
    purchase_price,
    regist_date
FROM Product;

执行结果:

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

为列设定别名

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

为列设定别名

代码语言:javascript
复制
SELECT
    product_id AS id,
    product_name AS name,
    purchase_price AS price
FROM Product;

执行结果:

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

设定中文别名

代码语言:javascript
复制
SELECT
    product_id AS "商品编号",
    product_name AS "商品名称",
    purchase_price AS "进货单价"
FROM Product;

执行结果:

常数的查询

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

查询常数

代码语言:javascript
复制
SELECT
    '商品' AS string,
    38 AS number,
    '2009-02-24' AS date,
    product_id,
    product_name
FROM Product;

执行结果:

从结果中删除重复行

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

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

代码语言:javascript
复制
SELECT DISTINCT product_type
FROM Product;

执行结果:

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

代码语言:javascript
复制
SELECT DISTINCT purchase_price
FROM Product;

执行结果:

在多列之前使用DISTINCT

代码语言:javascript
复制
SELECT 
    DISTINCT product_type,
             regist_date
FROM Product;

没使用DISTINCT关键字的情况:

执行结果:

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

WHERE语句选择记录

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

SELECT语句中的WHERE子句

代码语言:javascript
复制
SELECT <列名>, ...
FROM <表名>
WHERE <条件表达式>;

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

代码语言:javascript
复制
SELECT 
    product_name,
    product_type
FROM Product
WHERE product_type = '衣服';

执行结果:

SQL顺序

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

注释

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

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

运算符

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

算数运算符

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

SQL语句中使用运算表达式

代码语言:javascript
复制
SELECT 
    product_name,
    sale_price,
    sale_price*2 AS 'sale_price_x2'
FROM Product

执行结果:

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

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

代码语言:javascript
复制
SELECT (100 + 200)*3 AS calculation;

执行结果:

比较运算符

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

比较运算符

含义

=

和~相等

<>

和~不等

>=

大于等于~

>

大于~

<=

小于等于~

<

小于~

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

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

代码语言:javascript
复制
SELECT
    product_name,
    product_type,
    regist_date
FROM Product
WHERE regist_date < '2009-09-27';

执行结果:

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

创建Chars表并插入数据

代码语言:javascript
复制
-- 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’的数据

代码语言:javascript
复制
SELECT chr
FROM Chars
WHERE chr > '2';

执行结果:

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

不能对NULL使用比较运算符

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

选取NULL的记录

代码语言:javascript
复制
SELECT
    product_name,
    purchase_price
FROM Product
WHERE purchase_price IS NULL;

执行结果;

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

逻辑运算符

逻辑运算符

含义

NOT

不是~

AND

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

OR

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

查询条件中使用NOT

代码语言:javascript
复制
SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE NOT sale_price >= 1000;

执行结果:

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

代码语言:javascript
复制
SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE sale_price < 1000;

查询条件中使用AND

代码语言:javascript
复制
SELECT
    product_name,
    product_type,
    sale_price
FROM Product
WHERE
    product_type = '厨房用具' 
AND sale_price >= 3000;

执行结果:

查询条件中使用OR

代码语言:javascript
复制
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值使用不等式的原因。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据准备
  • SELECT语句基础
    • 列的查询
      • 查询出表中所有的列
        • 为列设定别名
          • 常数的查询
            • 从结果中删除重复行
              • WHERE语句选择记录
                • 注释
                • 运算符
                  • 算数运算符
                    • 比较运算符
                      • 对字符串使用不等式时的注意事项
                      • 不能对NULL使用比较运算符
                    • 逻辑运算符
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档