《sql必知必会》系列1基础检索相关

3 篇文章 0 订阅

数据库基础

数据库:保存有组织的数据的容器
表:某种特定类型数据的结构化清单
模式:关于数据库和表的布局及特性的信息
行:表中的一个记录
主键:唯一标识表中的一行 总是应该设立主键

检索数据

检索单个列:

SELECT prod_name
FROM Products;

如果没有明确查询的顺序,返回的数据没有特定的顺序。而且通常需要应用程序自己格式化数据格式;
SQL语句不区分大小写,经常以大写表示关键字,所有空格都被忽略,换不换行都行;必须以‘;’结尾
多个列之间用,隔开,检索所有列用*

SELECT prod_name,prod_id
FROM Products;

Distinct

不重复数据.distict关键字必须放在列名的前面

SELECT DISTINCT vend_id
FROM Products;

限制返回行数

SQL server 和access用 TOP 关键字 只检索前5行

SELECT TOP 5 prod_name
FROM Products;

Mysql、 Maria DB、SQLite用 LIMIT关键字,比如不超过5行

SELECT prod_name
FROM Products
LIMIT 5;

要得到后面5行的,需要指定从哪里开始以及检索的行数

SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;

从第5行气的5行数据(第一个被检索的行是第0行,从0开始)

注释

行内注释 –

SELECT TOP 5 prod_name -- 这是条注释
FROM Products;

多行:/**/

排序检索 order by

按列名

SELECT prod_name
FROM Products
ORDER BY prod_name;

以prod_name字母顺序排序
ORDER BY 子句要保证是select语句中最后一条语句
用非检索列排序也是合法的

按多个列排序,指定列名,用,分开。 先按第一个,然后第一个相同时按第二个等

按列位置

SELECT prod_name, prod_price, prod_id
FROM Products
ORDER BY 2,3; 

2,3指的是select后的第二个第三个列。不在select清单里的列不能用,而且很容易发生修改了select清单但没有修改order by子句的问题

降序 DESC

SELECT prod_name
FROM Products
ORDER BY prod_name DESC;

DESC只应用到直接位于它前面的列,要是想多个列上降序,每个列名后面都得加DESC
一般认为A a在字母顺序中一样,要是修改的话可能需要联系数据库管理员

过滤数据 where

SELECT prod_name,prod_price
FROM Products
WHERE prod_price = 3.49;

后面有多少个0是DBMS默认的,3.49和3.4900是一样的

order by要位于where之后

<> 不等于 !<不小于 !>不大于 Between 两者之间 is null 为null值

SELECT prod_name,prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;

BETWEEN必须指定低和高两个,由AND连接,闭区间

检查是否为空要用is null

SELECT prod_name,prod_price
FROM Products
WHERE prod_price IS NULL;

在过滤数据时,不满足某条件的返回结果里并不会包含null,null必须单独判断

组合where 子句 逻辑操作符

and, or, in, NOT

SELECT prod_name,prod_price
FROM Products
WHERE prod_price <=4 AND vend_id = 'DLL01';

or的话,许多DBMS只看第一个满足,后面就不看了,一并检索出来
可以用括号()来明确多个and or之间的优先级

SELECT prod_name,prod_price
FROM Products
WHERE  vend_id IN ( 'DLL01','BRS01');

IN后的选项必须在()里,逗号隔开,其实就是完成了OR的操作。合法选项很多时,用IN更清楚,求值顺序更容易管理,而且一般比or执行的快。IN的最大优点是可以包含其他select子句

通配符

用来匹配值的一部分的特殊字符

%

%表示任意字符出现任意次数

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

通配符可以在任意位置,使用任意多个
但是要注意,许多DBMS会用空格在后面填充,有时候’f%y’这样可能匹配不到,最好是’f%y%’
另外,通配符匹配不到nuLL

WHERE prod_name LIKE '%';

是匹配不到NULL的

_

_只匹配单个字符
不能多也不能少

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';

只匹配10-99 inch的

[]

[]用来指定一个字符集,必须匹配指定位置的一个字符。只有Access和Sql server支持

创建计算字段

存储在表中的数据一般不是应用程序要用的,有时候需要从数据库中检索出转换、计算或格式化后的数据。
只有数据库知道select中哪些列是实际的表列,哪些是计算字段。客户端看不出区别来。

拼接字段

多数DBMS使用+号

SELECT vend_name + '('+vend_country +')'
FROM Vendors
Order by vend_name;

Mysql 和mariaDB中使用的是concat

SELECT Concat(vend_name + '('+vend_country +')')
FROM Vendors
Order by vend_name;

可以用RTRIM(列名)来去掉多余的空格

使用别名

一个字段或值的替换名

SELECT RTRIM(vend_name) + '('+RTRIM(vend_country) +')'
AS vend_title
FROM Vendors
Order by vend_name;

算术计算

可以在计算字段中+ -* /

SELECT prod_id, quantity, item_price,quantity*item_price as expanded_price
FROM OrderItems
where order_num = 20008;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值