MySQL基础内容(一)
目录
一、常用命令
1、语句
数据查询语言:select
数据操作语言:insert delete updata ,对表中的数据进行增删改
数据定义语言:create drop alter ,对表结构的增删改
drop语句使用实例
事务控制语言:commit 提交事务,rollback 回滚事务
数据控制语言:grant 授权,revoke撤销权限
2、导入数据
第一步:登录
第二步:查看数据库——show databases;
第三步:创建数据库——create database 库名称;
第四步:使用数据库——use 库名称;
第五步:查看数据库中的表——show tables;
第六步:初始化数据——source 数据库路径
3、查看表结构
desc 表名;
4、表中的数据
select * from 表名;
5、常用命令
select database();——查询数据库名 select version();——查询版本 \c 结束一条语句
6、查看创建表的语句
show create table 表明;
二、SQL语句
1、简单查询语句
语法格式: select 字段名1,字段名2,字段名3,...,from 表名; 字段可以参与数学运算!!!
2、重命名
select 字段名1,字段名2,...as 新名字 from 表名; 如果新名字是中文,应是select 字段名1,字段名2,...as '新名字' from 表明;
3、条件查询
语法格式: select 字段,字段.... from 表名 where 条件: 执行顺序:先from,然后where,最后select
条件:
1、等于 =
2、大于小于> <
3、不等于 用<>或!=表示≠
4、在xxx和xxx之间——select ....from....where....between ... and ...;(条件限制为闭区间)
5、用select 字段 from 表名 where 字段 is null;查询数据是否为空
6、or代表或者,and代表并且
7、and和or同时使用时,and的优先级高,用括号
8、in:等同于or select 字段 from 表名 where 字段 in (字段1,字段2,...); not in(in的非情况)
9、like:模糊查询 %代表任意多个字符,代表任意1个字符 找出特定字符:select ... from....where...like '%特定字符%' 找出特殊位置字符:select ... from....where...like ' _ _ 特定字符%' 找出带有_的字符时,这么写% \ _ %,找出带%的同理
4、删除语句
1、删除一行
delete from 表名 where 条件;————条件如上所示
2、删除多行
delete from 表明 where 字段 in (字段...);
三、排序
1、升序降序
语法:select 字段 from 表名 order by 字段;——默认为升序
select 字段 from 表名 order by 字段 asc;——升序
select 字段 from 表名 order by 字段 desc;——降序
2、条件排序(order by)
1、select 字段 from 表名 order by 字段 (排序方式),字段(排序方式),...;
注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段。
2、select 字段1,字段2,... from 表名 order by 1/2/...;按照列进行排序。
语法格式: select
字段,字段..
from
表名
where
条件
order by
字段 排列方式;
order by 最后执行
四、分组函数(多行处理函数)
输入多行→输出一行 共5个函数 PS:分组函数都是对“某一组”数据进行操作的。
1、count 计数
语法:select count(字段) from 表名; 或 select count() from 表名;* * 代表总记录条数的意思 (字段)代表不为Null的字段的条数
2、sum 求和
语法:select sum(字段) from 表名;
3、avg 平均值
语法:select avg(字段) from 表名;
4、max 最大值
语法:select max(字段) from 表名;
5、min 最小值
语法:select min(字段) from 表名;
6、注意事项
· 分组函数自动忽略“空”
· 数据库中只要NULL参与的运算结果一定是NULL,除非使用的是分组函数 ifnull()空处理函数——语法 :select 字段, ifnull(字段,0) from 表名; 用于实现对NULL进行预处理,是一种单行处理函数
· 分组函数不可直接使用在where子句中 未进行分组,则无法进行分组函数的执行,因为group by 在 where 执行之后才执行,,所以where之后不能直接跟着分组函数,必须先分组才可进行分组函数的执行,否则会报错
· 分组函数也可以组合使用
· 分组函数一般都会和group by 联合使用,且在group by语句执行之后执行
五、分组查询(查询)
1、group by——分组
group by :按照某个字段或者某些字段进行分组
语法:select 字段1,字段2,字段3,... from 表名 group by 字段;
PS:使用group by时,select 后面只允许参加分组的字段和分组函数存在 ,其他的字段无意义,MySQL中错误写法不会报错但数据不匹配;在Oracle中直接报错
多个字段联合进行分组 语法:select (字段1,字段2,... + 分组函数(max/min/avg/...) ) from 表名 group by 字段1,字段2,...;
2、having ——过滤
having :having是对分组之后(group by)的数据进行再次过滤
语法:select 字段1,字段2,字段3,... from 表名 group by 字段 having 条件;
如果能够在where后面将需要的数据过滤完成,则使用where,效率高;实在用where无法解决,则使用having,但效率较低
3、查询结果去重
关键字:distinct 语法:select distinct 字段 from 表名; PS:distinct关键字只能出现在所有字段的最前面
当出现select distinct 字段1,字段2,... from 表名;时,代表将distinct之后的所有字段进行联合去重
完整的DQL语句如何写?
六、连接查询
引入:实际开发中,大多数情况下都不是在单表中进行查询,一般一个业务都会对应多张表
多表查询时如果不加限制,查询结果为各表记录数的乘积
1、连接查询的分类
内连接 等值连接 非等值连接 自连接
外连接 左外连接(左连接) 右外连接(右连接)
全连接(很少用)
2、连接查询中的笛卡尔积现象
2.1、表的别名
例:select e.ename,d.dname from emp e,dept d; emp e 代表给表emp起别名e,e.ename代表在表e中(即表emp中)查找ename字段
优点:1、执行效率高;2、可读性高
2.2、避免笛卡尔积现象
PS:避免笛卡尔积现象,不会减少记录的匹配次数;显示的为有效记录所以匹配次数不会减少
通过添加条件避免
语法:select e.ename,d.dname from emp e,dept d where 条件;
3、内连接
3.1、等值连接
内连接:a,b两张表没有主副表之分
关键:条件是等量关系
语法:select ...(需要筛选的字段) from 表名1 (inner) join 表名2 on 表名1.字段 = 表名2.字段 where ....;
3.2、非等值连接
非等值连接与等值连接的区别在于join后面的条件为非等量关系
3.3自连接
特点:一张表看作两张表 例:table a,table b——将同一张表命名两次,形成两张表
语法:select a.字段,b.字段 from 表a inner join 表 b on 条件; 自连接的条件可以是等量关系也可以是非等量关系
4、外连接
外连接:a,b两张表有主副表之分;当副表中数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配;根据业务判断是否用外连接
4.1、左外连接
定义:表示左表是主表
语法:select a.字段,b.字段 from 表a left (outer) join 表b on 条件;
4.2、右外连接
定义:表示右表是主表
语法:select a.字段,b.字段 from 表a right (outer) join 表b on 条件;
PS:左右外连接能够相互转化
以左表为主表:
select a.字段,b.字段 from 表a left join 表b on 条件;
= select a.字段,b.字段 from 表b right join 表a on 条件;
查谁,谁做主表
5、三张表查询
示例:
· ≥2张表的查询同理