1.什么是数据查询
对数据表中现有的数据进行逐行筛选的工作,按照要求从符合条件的记录中把指定的字段值提取出来,形成一个结果呈现出来。
2.简单查询
(1)基本语法
SELECT select _ list
FROM table _ name
[ WHERE search _ condition ]
[ ORDERBY order _ expression [ ASC ] DESC ] ]
[ LIMIT [ offset ] rowcount ]
语法说明:
select _ list:用户要查询的字段列表,“*”代表所有字段。
table _ name:用户要查询信息的表(表或视图)。
where:查询的筛选条件开始关键字。
search condition:查询条件的内容。
orderby:关键字,标明查询结果的排列顺序。
order _ expression :按着哪些字段进行排序。
asc: 标明是升序排序。
desc:将结果集按照降序排序。
Uimit:限制每次查询出来的数据条数。
(2)基本应用
<1>SELECT 全表查询
SELECT * FROM 表名;
<2>SELECT 选择列查询
SELECT 列名1,列名2,列名3... FROM 表名;
(3)查询中的别名
<1> 使用AS关键字为字段定义别名
SELECT 字段名1 AS 学号,字段名2 AS 别名... FROM 表明;
<2>使用空格为字段定义别名
SELECT 字段名1 别名,字段名2 别名... FROM 表名;
3.条件查询
(1)使用 WHERE 子句限制查询结果
<1>单条件查询
在 WHERE 语句后面只有一个条件,在 WHERE 子句后面使用比较运算符。
<2>多条件符合查询
多个条件的组合,使用逻辑运算符 "NOT","AND","OR"。
(2)使用DISTINCT消除重复行
SELECT DISTINCT 列名 FROM 表名;
(3)使用LIMIT限定查询返回行
LIMIT [位置偏移量] 行数
位置偏移量:用于指示MYSQL 从哪一行开始显示,是一个可选的参数,如果不指定该参数,将会从结果集的第一条记录开始(从零开始计数);
行数: 指示返回的记录条数
注:LIMIT 语句是MYSQL 特有的功能。ORACLE , SQL SERVER 限定查询返回行使用的是其他语句。
(4)处理NULL 值
为空: IS NULL 不为空: IS NOT NULL
注:用字段名=NULL 和IS NOT NULL 判断结果是错误的,直接通过SQL语句查询NULL是查询不到的结果都是0条。
(5)使用ORDER BY 进行查询排序
<1>单列排序
按学号表中的某一个列进行排序,ORDER BY 后面只有一个列名。
升序 ASC 降序 DESC
注:①在数据库中默认是以升序排列的,所有ASC可以省略不写;
②在数据中,NULL值比所有的值都要小。
<2>多列排序
ORDER BY 子句后面跟多个字段,字段之间用逗号隔开,每个字段后面都可以跟ASC 或 DESC。
5.MYSQL 的内置函数
(1)字符串函数
函数名 | 示例 | 函数功能 |
---|---|---|
CONCAT | SELECT CONCAT ('今天','晴天') 返回:今天晴天 | 连接成字符串 |
LENGTH | LENGTH(' hello world') 结果为11 | 返回字符串的长度 |
UPPER | UPPER('abcd') 返回为'ABCD' | 将字符串转为大写 |
LTRIM | LTRIM('abc')返回'abc' | 去除字符串左边的空格 |
RTRIM | RTRIM('abc')返回'abc' | 去除字符串右边的空格 |
TRIM | TRIM(' ABC ')返回‘ABC’ | 去除字符串左右两边的空格 |
REPLACE | REPLACE('abcccd','c','x')返回为‘abxxxd’ | 将abcccd中c替换为x |
STRCMP | STRCMP(S1,S2) | 比较字符串S1和S2,如果S1等于S2,返回0。如果S1小于S2,返回-1。如果S1大于S2,返回-1。 |
SUBSTRING | SUBSTRING('Johnson',5,3)返回为‘son’ | 从第五个位置开始截取长度为3的字符串 |
注:LENGTH:括号内为汉字时,则表示字节,可用char-length;
如果新闻长度超过10个字符长度,超过部分用“...” 表示。
(2)日期函数
<1>获取当前日期,时间的函数
获得当前日期+时间(date +time)函数:NOW();
获得当前日期函数:CUPDATE();
获得当前函数时间函数:CUPTIME();
<2>获取日期,时间指定部分的函数
函数名 | 函数功能 |
---|---|
MONTH(DATE) | 返回日期对应的月份(数字类型,返回1到12的整数) |
MONTHNAME(DATE) | 返回日期对应的月(字符串,返回月份的英文全名,如:2月份是Februray) |
DAYNAME(DATE) | 返回日期对应的工作日的英文名称 |
DAYOFWEEK(DATE) | 返回日期对应的一周中的索引。1表示周日,2表示周一 |
WEEKDAY(DATE) | 返回日期对应的工作日索引。0表示周一,1表示周二... 6表示周日 |
WEEK(DATE) | 计算日期是一年中的第几周,范围从1到52 |
DAYOFYERA(DATE) | 计算日期是一年中的第几天,范围从1到366 |
DAYOFMONTH(DATE) | 计算日期是一个月中的第几天,范围从1到31 |
YEAR(DATE) | 返回日期从中年份,范围从1000到9999 |
QUARTER(DATE) | 返回日期对应的一年中的季度值,范围从1到4 |
MINUTE(TIME) | 返回时间的分钟部分,范围从0到59 |
SECOND(TIME) | 返回时间的秒部分,范围从0到59 |
<3>计算日期和时间的函数
函数名 | 函数功能 |
---|---|
NOW() | 获得当前日期+时间格式 |
DATE_ADD() | 为日期增加一个时间间隔 |
ADDDATE | 可以用date_add() 来代替,用法一致 |
DATE_SUB() | 为日期减少一个时间间隔 |
SUBDATE() | 可以用date_sub()来替代,用法一致 |
ADDTIME() | 可以用date_add()来代替,用法一致 |
DATEDIFF() | 日期时间相减函数 |
查询学生姓名,姓名长度和系统当前时间
SELECT STUNAME , NOW() , LENGTH ( STUNAME ) FROM 表名;
(3)数学函数
函数名 | 函数功能 |
---|---|
format(x,y) | 将一个数字x,保留y位小数,并且整数部分用逗号分隔千 分位,小数部分进行四舍五入。 |
abs() | 求一个数的绝对值;absolute |
sqrt() | 求一个数的平方根。sqrt是sqruar(平方,矩形),root(根) 的缩写。 |
mod(x,y) | x除数,y被除数。结束是余数。 |
ceil() | 向上取整 |
floor() | 向下取整 |
rand() | 是用来生成随机数用的 |
truncate() | 不管四舍五入,直接把x的y位小数直接删除 |
sign() | 返回当前结果的符号,如果是负数返回-1,如果是0返回0,如果是正数,返回1 |
power | 幂运算 |
round() | 将数值表达式四舍五入为指定精度 |
(4)系统函数
函数名 | 函数功能 |
---|---|
DATABASE() | 返回当前数据库名 |
BENCHMARK( count,expr) | 将表达式 expr 重复运行 count 次 |
CONNECTION_ID() | 返回当前客户的链接ID |
FOUND_ROWS() | 返回最后一个SELECT查询进行检索的总行数 |
VERSION() | 返回MYSQL服务器的版本 |