设为首页 收藏本站
查看: 882|回复: 0

[经验分享] [SQL] SQL 基础知识梳理(二)

[复制链接]

尚未签到

发表于 2017-7-14 13:31:58 | 显示全部楼层 |阅读模式
SQL 基础知识梳理(二) - 查询基础
  【博主】反骨仔    【原文】http://www.cnblogs.com/liqingwen/p/5904824.html
DSC0000.png



  这是《SQL 基础知识梳理(一)- 数据库与 SQL》的下篇。

目录


  • SELECT 语句基础
  • 算术运算符和比较运算符
  • 逻辑运算符

一、SELECT 语句基础
  1.查询指定列:SELECT 关键字



--语法:
--SELECT <列名>, ...     -- 希望查询列的名称
--FROM <表名>            -- 指定选取数据的表


-- 从 Shohin 中取 3 列
SELECT shohin_id, shohin_mei, hanbai_tanka  -- 列的顺序可以任意指定,逗号(“,”)分隔,查询结果的顺序和 SELECT 子句中的顺序相同
FROM Shohin;
DSC0001.png

  2.查询表的所有列:星号(*)



--语法
--SELECT *        -- 星号(*)代表所有列
--FROM <表名>;
DSC0002.png

  【备注】使用星号(*)的话就无法设定列的显示顺序
  3.为列设定别名:AS 关键字



SELECT shohin_id AS Id, shohin_mei AS Name, shiire_tanka Price
FROM Shohin;    -- 不用 AS 关键字也可以
DSC0003.png




SELECT shohin_id AS "编号", shohin_mei AS '名称', shiire_tanka '价格'
FROM Shohin;    -- 设定汉语别名:加上双引号(")或单引号(')
DSC0004.png

  4.常数的查询



SELECT '产品' AS Product,            -- '产品':字符串常数
38 AS Price,                    -- 38:数字常数
'2016-09-30' AS '生产日期'        -- '2009-02-24':日期常数
DSC0005.png

  【备注】字符串和日期使用单引号(')。
  5.从结果中删除重复行:DISTINCT
DSC0006.png

  原图
  (1)



SELECT DISTINCT shohin_bunrui FROM dbo.Shohin;  -
DSC0007.png

  使用 DISTINCT 移除 shohin_bunrui 列中的重复数据
  (2)DISTINCT 对 NULL 类型的处理:存在多条 NULL 值的行时,会结合为一条 NULL 数据。



SELECT DISTINCT shiire_tanka FROM dbo.Shohin;
DSC0008.png

  (3)多列之前使用 DISTINCT



SELECT DISTINCT shohin_bunrui, torokubi
FROM dbo.Shohin
DSC0009.png

  DISTINCT 会将多个列的数据进行组合,将重复的数据结合为一条。
  【注意】DISTINCT 关键字只能用在第一个列名之前。
  6.筛选记录:WHERE
  WHERE 子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件,找出只符合该条件的记录。



--语法:
--SELECT    <列名>, ...
--FROM      <表名>
--WHERE     <条件表达式>;
DSC00010.png




SELECT shohin_id, shohin_mei, shohin_bunrui
FROM dbo.Shohin
WHERE shohin_bunrui = '衣服';  -- shohin_bunrui = '衣服':为条件表达式
DSC00011.png

  选取行之后,再输出列
  【备注】WHERE 子句:首先通过该子句查询出符合指定条件的记录,再选取出 SELECT 语句指定的列。
  【注意】SQL 子句的书写格式是固定的,不能随意更改。如 WHERE 子句必须紧跟在 FROM 子句后。
  7.注释的写法
  注释对于 SQL 的执行没有任何影响。



--  单行注释
/*
多行注释
*/

二、算术运算符和比较运算符
  1.算术运算符



SELECT shohin_mei, hanbai_tanka, hanbai_tanka * 2 AS 'hanbai_tanka_x2'
FROM dbo.Shohin;
DSC00012.png

  图 商品单价的两倍

四则算术运算符


含义
运算符


加法
+


减法
-


乘法
*


除法
/
  括号(“(”“)”)可以提高表达式的优先级。
  2.需要注意 NULL



SELECT 5 + NULL, 10 - NULL, 1 * NULL, 4 / NULL, NULL / 9;
DSC00013.png

  【备注】所有包含 NULL 的计算,结果肯定为 NULL。
  3.比较运算符

比较运算符


运算符
含义


=
相等


<>
不等


>=
大于等于


>
大于


<=
小于等于


<
小于



--示例1:
SELECT shohin_mei, shohin_bunrui
FROM dbo.Shohin
WHERE hanbai_tanka = 500;
DSC00014.png

  选取 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;
DSC00015.png

  选取 hanbai_tanka 列的值不是 500 的记录



--示例4
SELECT *
FROM dbo.Shohin
WHERE hanbai_tanka - shiire_tanka >= 500;
DSC00016.png

  3.对字符串使用不等号时的注意事项


DSC00017.gif DSC00018.gif


-- 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');
创建表
DSC00019.png

  原图



--示例:选取出大于'2'的数据的 SELECT 语句
SELECT *
FROM dbo.Chars
WHERE chr > '2';
DSC00020.png

  【注意】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 的记录
DSC00021.png

  【注意】希望选取 NULL 记录时,使用 IS NULL;希望选取不是 NULL 的记录时,使用 IS NOT NULL。

三、逻辑运算符
  1.NOT 运算符:取反



--示例:
SELECT *
FROM dbo.Shohin
WHERE NOT hanbai_tanka >= 1000;  --等价于 hanbai_tanka < 1000
DSC00022.png

  取 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;
DSC00023.png




SELECT shohin_mei, shiire_tanka
FROM dbo.Shohin
WHERE shohin_bunrui = '厨房用具'
OR hanbai_tanka >= 3000;
DSC00024.png

  【备注】多个查询条件进行组合时,需要使用 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';
DSC00025.png




--示例2
SELECT shohin_mei,
shohin_bunrui,
torokubi
FROM dbo.Shohin
WHERE shohin_bunrui = '办公用品'
AND (torokubi = '2009-09-11'
OR torokubi = '2009-09-20');
DSC00026.png

  【备注】AND 运算优先于 OR 运算,想要优先执行 OR 运算时可以使用括号。

传送门
  《SQL 基础知识梳理(一)- 数据库与 SQL》

备注
  这里的语句采用 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');
建表语句:CREATE TABLE Shohin
   【参考】《SQL ゼロからはじめるデータベース操作》

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393750-1-1.html 上篇帖子: SQL Server 查询树结构的表,查询一个节点的所有子节点 下篇帖子: SQL Server查询结果插入表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表