学习sql语句记录(资料:sql必知必会)

挺久之前学习sql语句的时候记录下来的,记得学习的资料是sql必知必会(其实后来又有去看了一遍mysql必知必会,发现很大程度上都忘了,所以学习的时候写下笔记还是很重要的,复习的时候会更快)

查询语句

简单的查询

查询单列
select 列名 from 表名
查询多列
select 列名1,列名2 from 表名

查询多列时使用逗号隔开,最后一个列名不需要加逗号

sql语句的简单规则
  • 不区分大小写(表名和列名等值要看具体的DBMS)

  • 空格会被忽略,可以使用代码式的写法来增加可读性

  • 多条SQL语句必须以分号分隔,单条要看DBMS,但是都加上也没错

注意:数据表示上,使用SQL语句一般返回原始的无格式的数据,所以一般很少使用实际直接检索的数据(没有应用程序提供的格式)

检索所有列
select * from 表名
检索不同的值

过滤掉相同的值

select DISTINCT 列名 from 表名

DISTINCT关键字对所有的查询列生效

限制结果

比如限制返回一定数量的行‘

这个在不同的数据库中实现不一样

  1. SQL Serve和Access

    使用TOP关键字

    SELECT TOP 5 列名
    FROM 表名
    
  2. DB2

    SELECT 列名
    FROM 表名
    FETCH FIRST 5 ROWS ONLY;
    
  3. Oracle

    SELECT 列名
    FROM 表名
    WHERE ROWNUM <=5
    
  4. MySQL、MariaDB、PostgreSQL或者SQLite

    SELECT 列名
    FROM 表名
    LIMIT 5;
    
    SELECT 列名
    FROM 表名
    LIMIT 5 OFFSET 5;
    /*从第5行开始的5行
    *这边的计数是从0开始的
    */
    

    MySQL、MariaDB和SQLite简略写法

    SELECT 列名
    FROM 表名
    LIMIT 5 ,5;
    

注释

  • 行内注释 –
  • 单行注释 #
  • 多行 /**/中间包含内容

查询结果排序

可以使用ORDER BY子句取一个或多个列的名字,对查询结果进行排序

如:

SELECT 列名
FROM 表名
ORDER BY 列名
  • ORDER BY子句应该时SELECT 语句的最后一个子句,否则会报错

  • 可以使用非检索列来排序,这样也是合法的

  • 使用多个列排序的时候,使用逗号分隔

  • 可以使用列位置来排序,使用数字来代替列名即可,也可以多个列,这个数字代表了SELECT清单中位置,从1开始数

  • 默认是升序排序(ASC)

  • 可以指定为降序(DESC)

    SELECT 列名
    FROM 表名
    ORDER BY 列名 DESC,列名 ASC
    

    指定的顺序只对它直接前面的列生效

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGL53scU-1595859104405)(查询语句.assets/image-20200422143209203.png)]

查询结果过滤(使用WHERE子句)

SELECT 列名
FROM 表名
WHERE 列名 >10;
SELECT 列名
FROM 表名
WHERE 列名 BETWEEN 5 AND 10;
#5到10之间的
符号含义
=,<,<=,!<,>,>=,!>,!=,<>,BETWEEN,IS NULL,IS NOT NULL等于,小于,小于等于,不小于,大于,大于等于,不大于,不等于,不等于,在指定的两个值之间,为空,不为空
  • SQL过滤和应用过滤,使用应用过滤时,数据库提供超量的数据提供,在应用中对数据进行过滤,这种方法会极大的影响应用的性能,且使得所创建的应用完全不具备可伸展性,且服务器发送多余数据,对带宽将造成浪费

  • !=和<>几倍呢上时一致的,但是DBMS不一定都支持,要详细看

  • 在列值为字符串时,比较值需要加上引号(单引号),为数值时,可以直接使用

  • 空值检测需要使用IS NULL

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCRYY7jN-1595859104411)(查询语句.assets/image-20200422150021703.png)]

高级数据过滤

使用逻辑语句

逻辑词含义
OR满足其一即可,有阻断
AND都要满足,运算优先级比OR高
ININ操作符用来指定条件范围,范围中的每个条件都可以进行匹配
NOT否定其后所跟的任何条件
  • OR 和AND 组合使用的情况中,可以使用()来消除歧义

  • IN语句和OR可以达成一样的效果,但是IN语法更清楚,和AND和OR语句组合的时候求值顺序更容易管理,执行速度比OR 快,IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句

使用通配符

使用通配符时必须使用LIKE操作符。

  • % 代表匹配任意字符的任意个数(0个也可以,即为空)

    注意填充的空格:DBMS 有的时候会将字段用空格填充满,比如规定是20个字符的长度,实际只占用的4个字符,那么可能剩余16个字符就会用字符填充满,那么使用通配符就可能会失败。

    比如:feed 和fee% 就可能无法匹配成功

  • _ 匹配一个任意字符(有且仅有一个)

注意:DB2不支持_

注意:Access中不使用_,而是使用?

注意填充的空格:和%的情况一致

  • []通配符,匹配方括号内字符中的一个(也是有且仅仅一个)

    此通配符可以用前缀字符^(脱字号)来否定

    举例: [^abc]

    使用NOT可以达到相同结果

注意:Access中使用!来否定

使用通配符的技巧

由于通配符的搜索速度比较慢

  • 不要过度使用通配符
  • 要使用时,尽量不要将其放在 搜索模式的开头,因为这样很慢
  • 注意位置

创建计算字段

去除首尾空格

去除字符串首尾的空格:使用TRIM()函数

去除字符串右侧的空格:使用RTRIM()

去除字符串左侧的空格:使用LTRIM()

计算字段不是表中原本就有的数值,一般通过计算或者变换后就可以得到,一般要设置别名来显示。

下面是几种常见的计算字段:

拼接:通过直接处理拼接几个列的数据得到新的数据列

在常见的DBMS中可以分为三种实现方式

  • +: Access和SQL Server中

    SELECT RTRIM(列名1)+'('+RTRIM(列名2)+')' AS 新列名
    FROM 表名
    #结果是:列值1(列值2)
    #使用这个RTRIM可以去除数据首尾的空格
    
  • || :PostgreSQL、SQLite、DB2、Oracle、OPen Office Base中使用

    SELECT RTRIM(列名1)||'('||RTRIM(列名2)||')' AS 新列名
    FROM 表名
    #结果是:列值1(列值2)
    
  • 特殊的函数:在MySQL和MariaDB中

    SELECT Concat(RTRIM(列名1),'(',RTRIM(列名2),')') AS 新列名
    FROM 表名
    #结果是:列值1(列值2)
    
别名的用处:

别名是可选的,但是一般都要加上,不然在程序中就无法调用

别名的名字既可以是一个单词,也可以是一个字符串。如果是后者,字符串应该括在引号中。虽然这种做法是合法的,但不建议这么去做。多单词的名字可读性高,不过会给客户端应用带来各种问题。因此,别名最常见的使用是将多个单词的列名重命名为一个单词的名字。

别名有时也叫导出列(derived column)

执行算数计算z

可以使用+,-,*,/

SELECT 列名1*列名2 AS 新列名
FROM 表名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLjXKafi-1595859104414)(查询语句.assets/image-20200424142122918.png)]

sql函数不推荐提前记忆

因为 各个DBMS之间的差距比较大,用到是去查就好

注意:使用了sql函数会导致可移植性下降,如果要用也要做好注释工作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值