一、mysql使用命令符
开始使用
先以管理员身份启动
然后
`mysql -uroot -p102077`
登录
退出mysql
mysql> exit;
查看数据库
mysql> show databases;
使用数据库
mysql> use xyuanjin(数据库名称);
查看该数据库下有哪些表
mysql> show tables;
创建数据库
mysql> create database xyuanjin(数据库名称);
查看mysql数据库的版本号
mysql> select version();
查看当前使用的是哪个数据库
mysql> selest database();
二、关于SQL语句分类
DQL
数据查询语言(select…)
DML
数据语言操作(操作表中数据)
? 增:insert 删: delete 改: update
DDL
数据定义语言(操作表中结构)
? create 新建 (等同于增) drop 删除 alter修改
TCL
事务控制语言
? 事务提交 commit;
? 事务回滚 rollback;
DCL
数据控制语言
? 授权 grant 撤销授权 revoke
三、导入sql文件
导入方法
mysql> source C:\..........(文件路径)
查看数据
mysql> show tables;
mysql> select * from 表名;
mysql> desc 表名;
四、DQL
1、简单查询
查询一个字段
mysql> select 字段名 from 表名;
例: mysql> select name from classinformation;
? mysql> select name,age from classinformation;
? mysql> select * from classinformation;
给查询的列表起名
用as关键字,也可省略,若所起列表名中有空格或别名是中文,则将列表名用单引号括起来即可
例: mysql> select name as studentname from classinformation;
? mysql> select name as 'student name' from classinformation;
? mysql> select name studentname from classinformation;
? mysql> select name 'student name' from classinformation;
列表参与运算
mysql> select time*12 from tablename;
条件查询
select
字段一,字段二,字段三,
from
? 表名
where
? 条件;
条件
between...and...
is null (is not null)
in (not in)
like (模糊查询)
? 其中%匹配任意字符,_匹配一个字符
? 例:'%y' 以y结尾
? 'y%' 以y开头
? '_y%' 第二个字母是y
? '__y%' 第三个字母是y
排序
select
? 字段一,字段二,字段三,
from
? 表名
where
? 条件
order by
? ...; (默认升序 升序asc 降序desc)
例:
? order by
? sal asc, ename desc;
2、单行处理函数
lower() 转换小写
upper() 转换大写
length() 取长度
substr() 取子串 substr(被截取的字符串,起始下标,截取长度)
trim() 去空格
rand() 生成随机数
round() 四舍五入 round()
ifnull() 将null转换为一个具体值
case...when...then...else...end 当满足啥啥时然后执行啥啥
3、多行处理函数
分组函数(先分组,再使用)
count
sum
avg
max
min
4、单表查询
select 5 (select中可以使用分组函数)
? ...
from 1
? ...
where 2 (where中不可以使用分组函数)
? ...
group by 3
? ...
having 4 (对分组之后的的数据进一步过滤)
? ...
order by 6
? ...
limt 7
...
例:找出每个工作岗位的平均薪资,要求显示平均薪资大于1500,除MANAGER岗位之外,平均薪资按照降序排列
? select
? job,avg(sal) as avgsal
? from
? emp
? where
? job <> 'MANAGER'
? group by
? job
? having
? avg(sal) > 1500
? order by
? avgsal desc;
对查询结果去重
&&&& distinct 放在所查询的字段前面
对工作岗位去重
select distinct job from emp;
对多个字段去重(联合字段进行去重)
select distinct job ,name from emp;
5、连接查询(跨表查询)
//表起别名,提高效率
select
? e.ename,d.dname
from
? emp e, dept d
where
? e.deptno = d.deptno
内连接之等值连接
查询员工名字及其所在部门名称(两张表的连接为部门编号相同)
select
? e.ename,d.dname
from
? emp e
inner(可省略) join
? dept d
on
? e.deptno = d.deptno (等值)(连接条件)
where
? 筛选条件
内连接之非等值连接
查询每个员工的薪资等级,要求显示员工名,薪资及其等级
select
? e.ename,e.sal,s.grade
from
? emp e
inner join
? salgrade s
on
? e.sal between s.losal and s.hisal;(非等值连接)
内连接之自连接
技巧:一张表看成两张表
查询员工的上级领导,显示员工名和对应领导名
select
? a.ename as'员工名‘,b.ename as'领导名'
from
? emp a
join
? emp b
on
? a.mgr = b.empno
外连接(表分主次)
左外连接 left join
右外连接 right join
查询员工的上级领导,显示所有员工名(员工表为主表)
select
? a.ename as'员工名‘,b.ename as'领导名'
from
? emp a
left (outer) join
? emp b
on
? a.mgr = b.empno
多表连查
select
? ...
from
? a
join
? b
on
? a和b的连接条件
join
? c
on
? a和c的连接条件
left join
? d
on
? a和d的连接条件(左连接,a为主表,d为次表)
子查询
select语句嵌套(可以嵌套于select,from,where中)
from 中的select可以当作一个新的表
union 合并查询结果集
例:1. select name,job from emp where job in ('manager','salesman')
? 2. select name,job from emp where job = 'manager'
? union
? select name,job from emp where job = 'salesman'
? 使用union效率更高
limit 使用
作用 :将查询结果一部分取出来,通常使用在分页查询中
用法 :
limit startIndex(可省),length
? startIndex 起始下标,从0开始
? length 长度
例:
select
? name,sal
from
? emp
order by
? sal desc
limt
? 0,5;
limit在order之后执行
分页
limit (pageNo-1)*pageSize , pageSize
五、DDL
建表
create table 表名(
? 字段一 数据类型,
? 字段二 数据类型
);
//表名一般用 t_ 或 tbl_ 开头
mysql数据类型
varchar 可变长度字符串(可动态分配空间,但速度慢)
char 定长字符串(速度快)
int 整数型
bigint 长整型
float 单精度浮点型
double 双精度浮点型
date 短日期类型 默认格式:%Y-%m-%d
datetime 长日期类型 默认格式:%Y-%m-%d %h:%i:%s
clod 字符大对象(最多可储存4G字符串)
blod 二进制大对象(图片、声音、视频等流媒体数据)
删除表
drop table t_student;
drop table if exists t_student;
六、DML
插入数据(insert)
insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3...)
注意: 字段名和值一一对应,即数量对应,数据类型对应
? 若省略字段名不写,则默认写了全部字段名,所以值要写全部的
例:
insert into t_student(no,name,age,email) values(1,'xiaobai',17,'123456@qq.com')
插入日期
格式化数字 : format(数字,‘格式’)
select ename,format(sal,'$999,999') as sal from emp;
str_to_date : 将字符串varchar类型转换成date类型
date_format : 将date类型转换为具有一定格式的varchar类型
mysql日期格式
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
now() 函数 获取当前时间,带有时分秒信息!!!为datetime类型
修改update
update 表名 set 字段名1 = 值1,字段名2 = 值2,字段名3 = 值3....where 条件;
注意:没有限制条件会导致所有数据都改变
例:
update t_user set name = 'jack',birth = '2002-02-02',create_time = now() where id = 2;
删除数据(delete)
delete from 表名 where 条件;
注意:没有限制条件会将所有数据都删除
|