1.MySQL
show databases;显示数据库
1.1 DQL 查询语言
1.1.1 基础查询
select 查询列表 from 表名
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
3、查询多个字段时用,隔开
- 查询单个字段
select 字段 from 表
- 查询多个字段
select 字段1,字段2.....from 表
- 查询所有的字段
select * from 表
- 查询常量值
SELECT 100;
SELECT ‘asdd’;
- 查询表达式
SELECT 100%98;
- 查询函数
SELECT 函数名();
- 别名
//便于理解
//如果查询的字段有重名情况,使用别名可以区分
起别名的两种方法:
SELECT 字段 AS 别名
SELECT 字段 别名
别名中有空格时建议添加双引号
- 去重
SELECT DISTINCT 字段
-加号+
两个操作数都为数值型,做加法运算
其中一方为字符型,试图将字符型数值转换成数值型,如果转换成果,继续做加法运算,转换失败,字符型数值转换为0 ,如果一方为null,+的结果为null
CONCAT(字段1,字段2)//连接两个字段
1.1.2 条件查询
SELECT
查询列表
FROM
表名
WHERE
筛选条件
分类
1、按条件表达式筛选
条件运算符 > < = != >= <=
2、按逻辑表达式筛选
&& || !
AND OR NOT
3、模糊查询
like
between and
in
is null
#1 like
①一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
select
*
from
employees
where
last_name like '%a%';
#2.between and
/*
①使用between and 可以提高语句的简洁度
②包含临界值
③两个临界值不要调换顺序
*/
#3.in
/*
含义:判断某字段的值是否属于in列表中的某一项
特点:
①使用in提高语句简洁度
②in列表的值类型必须一致或兼容
③in列表中不支持通配符
*/
#4、is null
=或<>不能用于判断null值
is null或is not null 可以判断null值
1.1.3 排序查询
语法:
select 查询列表
from 表名
【where 筛选条件】
order by 排序的字段或表达式;
特点:
1、asc代表的是升序,可以省略
desc代表的是降序
2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
3、order by子句在查询语句的最后面,除了limit子句
1.1.4 常用函数
概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1、隐藏了实现细节 2、提高代码的重用性
调用:select 函数名(实参列表) 【from 表】;
特点:
①叫什么(函数名)
②干什么(函数功能)
分类:
1、单行函数
如 concat、length、ifnull等
2、分组函数
功能:做统计使用,又称为统计函数、聚合函数、组函数
常见函数:
一、单行函数
字符函数:
length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
concat:拼接字符串
substr:截取字符
instr:返回子串第一次出现的索引,如果没有,返回0
trim:去除字符串前后空格,或去除字符串前后前后特定字符,字符串中间的不去除
upper:变大写
lower:变小写
lpad:用指定字符,左填充到指定长度,若字符串超过指定长度,则从右侧删除
rpad:右填充,其他同上
replace:用指定字符1替换字符串中的特定字符2
数学函数:
round 四舍五入,可指定小数点后保留位数
ceil:向上取整,返回大于等于参数的最小整数
floor:向下取整
truncate:截断,小数点后保留位数
mod:取余
日期函数:
now:返回当前系统日期和时间
curdate:返回当前系统日期,不包括时间
curtime:返回当前系统时间,不包括日期
year:返回指定时间的年
month:返回月
monthname:返回英文月
day:日
hour:小时
minute:分钟
second:秒
str_to_date:日期格式的字符,转换成日期
date_format:日期转换成字符
其他函数:
version:版本
database:当前数据库
user:当前用户
控制函数
if: 实现 if else 的效果 IF(表达式,语句1,语句2)表达式为真执行1,为假执行2
case:switch case效果
case 要判断的字段或表达式
when 常量1 then 语句1;
when 常量1 then 语句2;
...
else 语句n;
#二、分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配实现去重的运算
4、count函数的单独介绍
一般使用count(*)用作统计行数
5、和分组函数一同查询的字段要求是group by后的字段
1.1.5 分组查询
语法:
select 查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;
特点:
1、和分组函数一同查询的字段必须是group by后出现的字段
2、筛选分为两类:分组前筛选和分组后筛选
针对的表 位置 连接的关键字
分组前筛选 原始表 group by前 where
分组后筛选 group by后的结果集 group by后 having
问题1:分组函数做筛选能不能放在where后面
答:不能
问题2:where——group by——having
一般来讲,能用分组前筛选的,尽量使用分组前筛选,提高效率
3、分组可以按单个字段也可以按多个字段
4、可以搭配着排序使用
1.1.6 连接查询
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
分类:
按年代分类:
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
全外连接
交叉连接
1.2 DML
2 数据库创建
//创建数据库
CREATE DATABASE selectTest;
use selectTest;
//创建表
CREATE TABLE student(
s_no VARCHAR(20) PRIMARY KEY COMMENT'学生学号',
s_name VARCHAR(20) NOT NULL COMMENT'学生姓名 不能为空',
s_sex VARCHAR(10) NOT NULL COMMENT'学生性别',
s_birthday DATETIME COMMENT'学生生日',
s_class VARCHAR(20) COMMENT'学生所在的班级'
);