目录
本文主要讲解SELECT语句的具体用法,包括基本知识、常用的字段类型、where子句、常用函数等。
1 基础知识
1.1 数据库的基本形式
在关系型数据库中,所有数据都存在表中,一个表由字段和数据组成,如下图所示:
编号 |
姓名 |
性别 |
年龄 |
成绩 |
爱好 |
001 |
王成 |
男 |
18 |
91 |
打篮球 |
002 |
李四 |
男 |
19 |
92 |
踢足球 |
003 |
李三 |
女 |
20 |
93 |
羽毛球 |
字段
数据
数据
数据
1.2 mysql数据库登陆的基本操作
1、mysql -u root -p
登陆命令,需要输入密码,然后登陆mysql。
2、show databases;
可以查看现有数据库。
3、use 数据库名;
可以使用指定的数据库,比如use mysql。
4、show tables;
可以显示当前数据库中的表。
5、show create table 表名;
显示指定表名的定义,即该表的所有字段信息。
6、desc 表名;
显示指定表名的定义,即该表的所有字段信息。
7、select * from 表名;
显示指定表名的表中的所有信息。
2 常用字段类型
常用的字段类型有数值类型、字符型、日期型。
2.1 数值型
numer(m) 表示m位的整数。
number(m,n) m表示总位数,m是小数点后的位数。
数值类型可以直接使用 + - * / 运算符。
2.2 字符型
char(m) m位定长字符串
varchar2(m) m位变长字符串
定长就是长度固定,不足的部分用空格填充。变长就是长度随数据的不同而不同,不去填充空格。定长字符串效率要略高于变长字符串,但是比较浪费空间,如果没有特殊的要求,一般选用varchar2。
2.3 日期型
date 即日期型,包括年月日,小时分秒。
日期型的字段可以使用 + - 运算符。
3 selete语句
select用来做数据查询,后面可以跟各种字段名,表示要查询的字段,多个字段用”,”隔开,也可以跟表达式和特殊内容。
select语句一般和from语句结合使用,from语句,后面跟表名,表示从哪些表中查询数据,多个表用”,”隔开。比如查看emp表中的id、first_name、sal字段,可以使用:
select id,first_name,sal from emp;
每个字段在select语句中,都可以定义一个别名,方便显示和使用,比如查看emp表中的id,显示成myid:
select id myid from emp;
如果要指定大小写,则需要用””来限定,如下:
select id “myid” from emp;
注:sql语句本身不包括分号,但是想要运行必须用” ; ” 或者”/”。
“||”可以连接两个文本型(字符串)的数据,比如显示的时候,将first_name和last_name合并在一起显示出来:
select id , first_name || ‘ ’ || last_name name from emp;
在数据库中,有些数据不是必须的,有可能出现空缺的情况,可以用“NULL”表示数据的空缺。“NULL”是一种特殊的数据,不能简单地看作’’或者0。
一般的数据库(mysql和oracle都有)有一种特殊的表,叫做虚表,里面只有一个字段,但是这个字段类型可以是任意的,可以这样操作它:
select sysdate() from dual;
(mysql中sysdate()可以获取当前时间信息)
select 1+1 from dual;
4 where子句
在数据库的查询中,更多的不是查看所有的数据,而是根据一定的条件进行数据的筛选,按照条件进行的查询叫做条件查询,条件查询需要用到where子句。
4.1 条件操作符
select id , sal from emp
where sal >1000;
筛选sal大于1000的数据显示出来,同样,可以是:
操作符 |
说明 |
示例 |
= |
等于 |
where sal =10000 |
<> |
不等于 |
where sal <> 10000 |
!= |
不等于 |
where sal != 10000 |
< |
小于 |
where sal < 10000 |
<= |
小于等于 |
where sal <= 10000 |
> |
大于 |
where sal > 10000 |
>= |
大于等于 |
where sal >= 10000 |
between and |
在指定的两个值之间 |
where sal between 1000 and 10000 |
in() |
在数据清单内 |
where sal in (2000,5000,10000) |
not in() |
不在数据清单内 |
where sal not in(2000,5000,10000) |
like |
模糊查询 |
where name like ‘a%’ |
is NULL |
提取空值的数据 |
where sal is NULL |
is NOT NULL |
提取不是空值的数据 |
where sal is NOT NULL |
like 模糊查询时,可以结合通配符进行查询:
“_” 代表任意的单个字符,like ‘a_’表示找出以a开头后面还有一个字符的数据。
“%”代表任意的0-n个字符,like ‘a%’表示找出以’a’开头,后面随意的数据。
4.2 逻辑运算符
查询条件也可以使用逻辑运算符来组合:与、或、非:
and 逻辑与
or 逻辑或
not 逻辑非
5 排序
查询结果经常需要排序,排序分为升序和降序。可以使用order by 子句来进行排序:
order by 字段名/别名/序号
order by后面可以跟多个拍寻条件,但是只有在前面的条件相等的情况下,才会考虑后面的。
6、函数
函数提供了某种功能,比如NVL()函数提供了对空值的处理。有些功能数据库提供了,开发的语言也提供了 类似功能的函数,可以根据需求进行选择。函数分为单行函数和多行函数(分组函数),单行函数就是输入一条数据,输出一条数据,多行数据就是输入多条数据,输出一条数据。
6.1 单行函数
单行函数分为:
1、字符函数,处理字符串类型的函数(类似C语言的string.h中的函数)。
2、数值函数,处理数值类型的函数。
3、日期函数,处理日期类型的函数。
4、转换函数,数值、日期、字符三种类型数据的转换。
5、其他函数,一些辅助函数,比如nvl(),空值替换函数。
6.1.1 字符函数
LOWER ——转换所有大写字母为小写。
UPPER ——转换所有小写字符为大写。
INITCAP ——首字母大写,其他字母小写。
CONCAT ——连接两个字符串,这个函数基本不用,使用“||”代替。
SUBSTR ——截取字符串,获取字符串的一部分。
LENGTH ——获取字符串的长度。
6.1.2 数值函数
round() ——四舍五入。
trunc() ——全部舍。
6.1.3 日期函数
round() ——日期的四舍五入
trunc() ——日期的全部舍。
Months_between() ——计算两个日期间隔了多少个月。
6.1.4 转换函数
转换函数用于文本、日期、数值三者之间的类型转换,这种转换只发生在字符和日期之间或者数值和字符之间。
1、字符类型和日期类型之间的转换函数
to_date() ——字符转日期。
to_char() ——日期转字符。
to_date(‘文本格式的日期’,’日期格式’),其中,日期的格式如下:
Y 代表年,一般用 ‘yyyy’代表4位年,’yy’代表两位年
M 代表月,一般用’MM’代表2位月,不足会处理。
DD 代表日,一般用DD代表2位日。
H 代表小时,一般用’HH24’代表24小时制的2位小时。
MI 分
S 秒,一般用’SS’代表2位秒。
例如:
to_date(‘2019-3-17 10:10:10’,’YYYY-MM-DD HH24:MI:SS’)
to_char(stsdate(),’yyyy-mm-dd’)
2、数值型和字符型的转换函数
to_char() ——数值转字符。
to_number() ——字符转数值。
to_char(数值,’数值格式’),格式如下:
9 表示这一位是数字,没有就空着。
0 表示这是一位数字,没有就补0.
$ 货币美元符号。
L 本地货币符号。
. 小数点
, 千分位
to_char(1202,’000,000.00$’) 表示将1202转成字符,结果是: 001,202.00$。
单行函数可以无限层嵌套,计算的次序是从内到外:
round(nvl(commission_pct,0),2) //函数嵌套
6.2 分组函数(多行函数)
常见的分组函数如下:
avg() ——取平均值,只能用于数值型。
count() ——总数,用于所有类型。
max() ——最大值,用于所有类型。
min() ——最小值,用于所有类型。
sum() ——求和,只能数值型。
分组函数会自动过滤空值,如果需要考虑空值,需要借助nvl()函数来替换空值。