SQL必知必会
一、了解SQL
1、数据库:保存有组织的数据的容器,≠数据库软件
数据库软件:数据库管理系统(DBMS)
2、表:某种特定类型数据的结构化清单
主键特性:①唯一标示性,不具备业务意义;②唯一性,非空值;③不可修改性;④被删不可重用
二、查询语句
一、检索数据(Select)
1、用途:从一个或多个表中检索信息——需要给到信息想选择什么及从什么地方选择
2、语句特性:①多条SQL语句必须以分号结尾;②SQL语句不区分大小写;③SQL语句可以写成长句也可以分写多行
3、检索多列时:一定要在列名之家加上逗号,但是最后一个列名不加
select prod-id, prod-name, prod-price
from Products;
4、检索所有列:用通配符*
select * from Products;
5、检索不同值:distinct—指示数据库只返回不同的值
注意:distinct关键词作用于所有列,不能部分使用distinct
select distinct prod-id from Products;
6、限制结果:limit 5 offset 5表示从第5行起的5行数据(mysql语法)
注意:第一个被检索的是第0行,而不是第一行
二、排序检索数据
1、排序数据:在指定order by子句时,应保证它是select语句最后一条子句
select prod-name from Products order by prod-name;
2、按多个列排序:在多个列排序时,排序顺序完全按照规定进行
select prod-id, prod-name, prod-price from Products
order by prod-name, prod-price ;
3、指定方向排序:Desc降序,Asc升序(默认升序)
三、过滤数据
1、数据根据where子句指定条件进行过滤,where子句在表名from之后给出,如有order by应位于where之后
2、where子句操作符(=、>、<,!=/<>、between and-包括指定开始值及结束值、is null)
select prod-id, prod-name, prod-price from Products
where prod-price>5 desc;
3、不匹配检查:单引号用来限定字符串
select prod-id, prod-name from Products
where prod-name<>‘dllo1’;
4、空值检查:is null
select prod-price from Products
where prod-price is null;(空prod-price字段,不是价格为0)
四、高级数据过滤
1、and操作符:
select prod-id, prod-name, prod-price from Products
where prod-name'good' and prod-price >5 ;
2、or操作符:它指示DBMS检索匹配匹配任意条件行
3、 求值顺序:在and和or中会优先处理and,如要解决就要用圆括号对操作符进行明确分组—圆括号先处理
任何具有and和or操作符的where子句,都应使用圆括号明确分组,消除歧义
4、in操作符:用来指定条件范围,功能相当于or
select prod-id, prod-name, prod-price from Products
where prod-price in(1,,8);
5、not操作符:否定其后跟的任何条件,因为not从不单独使用,所以not关键词可以用在过滤列前
select prod-id, prod-name, prod-price from Products
where not prod-name=‘goog’;
五、用通配符进行过滤
1、like操作符:指示DBMS
通配符是用来匹配值得一部分的特殊字符
百分号%通配符:表示任何字符出现任意次数
select prod-id, prod-name, prod-price from Products
where prod-name like ‘good%';
下划线—通配符:只能匹配单个字符而不是多个字符
方括号[]通配符:用来指定一个字符集(只有access和sql server支持集合)
2、使用通配符技巧:①不要过度使用通配符;②尽量不把通配符用在搜索模式开始处;③注意通配符位置,如果放错地方可能不会返回想要的数据
三、创建计算字段
1、拼接字段:+ / ||(mysql使用特殊函数)
select prod-id + '('+prod-name+')' from Products order by prod-id desc;
MYSQL使用
select concat (prod-id , '(',prod-name,)' )
from Products
order by prod-id desc;
2、ririm():去掉值右边的所有空格;ltrim()去掉字符串左边空格;trim()去掉字符串左右两边空格
3、使用别名as:
select concat (prod-id , '(' , prod-name , )' )
as prod-new
from Products
order by prod-id desc;
4、执行算术运算:+ - * /
四、使用函数处理数据
1、文本处理函数
2、时间和日期处理函数
3、数值处理函数
五、汇总数据
1、聚集函数:avg、count、max、min、sum
2、聚集不同值:
六、分组函数
1、分组group by:
过滤having: