SQL数据库

SELECT语句

1、检索单个列

select prode_name from Products;

2、检索多个列

select prod_id,prod_name,prod_price from Products;
注:选取多个列,逗号分割

3、检索所有列

select * from Products;
注: 选择所有列,不适用于大型数据,可能存在选出后无用情况

4、检索不同的值

select distinct vend_id from Products;
注:distinct选取唯一值,必须放在列名前面,哪列需要唯一就放谁前面

5、限制结果

select prod_name from Products limit 5;
注:限制个数,返回不超过5行的数据
select prod_name from Products limit 5 offset 5;
注:返回从第五行起的5行数据
----第一个被检索的行是第0行,而不是第一行,因此,limit1 offset 1会检索第二行,而不是第一行
mysql和mariadb支持简化版的limit 4 offset 3 语句,即limit 3,4

6、使用注释

select prod_name --这是一条注释 from products

排序检索数据
1、排序数据

select prod_name from Products order by prod_name
注:order by 子句取一个或多个列的名字,据此对输出进行排序

2、按多个列排序

select prod_id, prod_price, prod_name from Products order by prod_price, prod_name;
注:检索三个列,并按其中两个列对结果进行排序,首先按价格,然后按名称排序

3、按列位排序

select prod_id, prod_price,prod_name from Products order by 2,3;
注:order by支持相对列位进行排序

4、指定排序方向

select prod_id, prod_price, prod_name from Products order by prod_price DESC
注:降序排序,必须指定DESC关键字

过滤数据
1、使用where子句

----数据根据where子句中指定的搜索条件进行过滤,where子句在表名(from子句)之后给出,如下所示:
select prod_name, prod_price from Products where prod_price = 3.49;
提示:SQL过滤与应用过滤
注:where子句的位置
----在同时使用order by和where子句时,应该order by位于where之后,否则会产生错误

2、where 子句操作符

select prod_name, prod_price from Products where prod_price < 10;
列出所有价格小于10美元的产品
select prod_name, prod_price from Products where prod_price <= 10;
select vend_id, prod_name from Products where vend_id <> ‘DLL01’;
----单引号用来限定字符串,如果将值与字符串类型的列进行比较,就需要限定引号,用来与数值列进行比较的值不用引号。
select vend_id,prod_name from Products where vend_id != ‘DLL01’;
注:是!= 还是<>?
select prod_name, prod_price from Products where prod_price between 5 and 10;
----使用between操作符,它检索价格在5美元和10美元之间的所有产品。
----使用between时,必须指定两个值,所需范围的低端值和高端值,这两个值必须用and关键字分隔
注:null 无值(no value),它与字段包含0,空字符串或仅仅包含空格不同
select prod_name from Products where prod_price IS null;
where子句就是is null 子句
----这条语句返回所有没有价格(空prod_price字段,不是价格为0)的产品,由于表中没有这样的行,所以没有返回数据

高级过滤数据
1、组合where子句

and子句或or子句
----操作符(operator)
----用来联结或改变where子句中的子句的关键字,也称为逻辑操作符(logical operator)
and 操作符
----要通过不止一个列进行过滤,可以使用and操作符给where子句附件条件
select prod_id, prod_price, prod_name from Products where vend_id = ‘DLL01’ and prod_price <= 4;
----order by 子句,应该放在where子句之后
----or操作符与and操作符正好相反,它指示DBMS检索匹配任一条件的行
select prod_name, prod_price from Products where vend_id = ‘DLL01’ or vend_id = ‘BRS01’;
select prod_name, prod_price from Products where vend_id = ‘DLL01’ or vend_id = ‘BRS01’ and prod_price >= 10;
注:SQL在处理or操作符前,优先处理and操作符
select prod_name, prod_price from Products where (vend_id = ‘DLL01’ or vend_id = ‘BRS01’) and prod_price >= 10;

2、in操作符

---- in操作符用来指定条件范围,范围中的每个条件都可以进行匹配
select prod_name, prod_price from Products where vend_id in (‘DLL01’,‘BRS01’) order by prod_name;
— in操作符完成了与or相同的功能
select prod_name, prod_price from Products where vend_id = ‘DLL01’ or vend_id = ‘BRS01’ order by prod_name;
— 使用in操作符优点如下:
(1)在很多合法选项时,in操作符的语法更清楚,更直观
(2)在与其他and和or操作符组合使用in时,求值顺序更容易管理
(3)in操作符一般比一组or操作符执行得更快
(4)in的最大优点是可以包含其他select语句,能够更动态的建立where子句

3、not操作符

select prod_name from Products where not vend_id = ‘DLL01’ order by prod_name;
select prod_name from Prodcuts where vend_id <> ‘DLL01’ order by prod_name;
— mariaDB支持使用NOT否定in,between和exists子句

通用配符进行过滤
1、like操作符

— 利用通配符,可以创建比较特定数据的搜索模式
通配符(wildcard)
------ 用来匹配值的一部分的特殊字符
搜索模式(search pattern)、
----- 由字面值,通配符或两者组合构成的搜索条件
百分号(%)通配符
最常使用的通配符是百分号(%),在搜索串中,%表示任何字符出现任意次数
select prod_id, prod_name from Products where prod_name like ‘Fish%’;
区分大小写
—根据DBMS的不同及其配置,搜索可以是区分大小写的,如果区分大小写,则‘fish%’与Fish bean bag toy就不匹配
— 搜索模式‘%bean bag%’表示匹配任何位置上包含文本bean bag的值,不论它之前或之后出现什么字符
-下面例子找出以F起头,以y结尾的所有产品
select prod_name from Products where prod_name like ‘F%’;
----根据邮件地址的一部分来查找电子邮件,例如where email like b%@forta,com
— 除了能匹配一个或多个字符外,%还能匹配0个字符,%代表搜索模式中给定位置的0个、1个或多个字符
—通配符不能匹配null,子句where prod_name like '%'不会匹配产品名称为null的行
— 'F%y%'可以匹配y之后的字符(或空格),如存在空格也可用函数去除空格
-下划线(_),下划线的用途与%一样,但它只匹配单个字符,而不是多个字符
select prod_id, prod_name from Products where prod_name like ‘__inch teddy bear’;
—对照一下,下面select语句使用%通配符,返回三行产品:
select prod_id, prod_name from Products where prod_name like ‘% inch teddy bear’;
—与%能匹配0个字符不同,_总是刚好匹配一个字符,不能多也不能少
–方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符
找出所有名字以J或M起头的联系人,可进行如下查询:
select cust_contact from Customers where cust_contact like ‘[JM]%’ order by cust_contact;
前缀字符^(脱字号)来否定,例如:下面的查询匹配不以J或M起头的任意联系人名(与前一个例子相反):
select cust_contact from Customers where cust_contact like ‘[^JM]%’ order by cust_contact;
也可以使用not操作符得出相同的结果,^的唯一优点是在使用多个where子句时可以简化语法:
select cust_contact from Customers where not cust_contact like ‘[JM]%’ order by cust_contact;

2、使用通配符的技巧

(1)不要过度使用通配符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值