Mysql命令启停
net start mysql;
net stop mysql;
Mysql命令行命令
- 退出:exit
- 显示密码登录mysql:mysql -uroot -proot
- 隐藏密码登录mysql:mysql -uroot -p
- 查看数据库:show databases;
- 使用数据库:use test;
- 查看表:show tables;
- 查看表结构:desc 表名;
- 查看版本号:select version();
- 查看当前使用的数据库:select database();
- \c 终止一条sql语句命令输入
SQL基本
- 起别名:as(省略也可以,用个空格代替),若遇上别名有空格,则用单引号解决
SQL语句分类
- DQL
- 查询语言(select)
- DML
- 数据操作
- insert:创建
- update:修改
- delete:删除
- DDL
- 表操作
- create:创建
- drop:删除
- alter:修改
- TCL
- 事务提交:commit
- 事务回滚:rollback
- 事务开始:begin
- DCL
- 数据库控制语言:例如grant授权、revoke撤销授权
导入数据
- use 数据库
- source 路径 (路径不能有中文)
条件查询
- between ... and ... 两个值之间,包含两个值
- 注意:必须遵循左小右大原则
- <> 或 != :不等于
- is null, is not null
- and,or
- in
- like :模糊查询
- % :匹配任意个字符
- _ :匹配一个字符 (\_转义)
函数
单行处理函数
一个输入,一个输出:处理完一行后,再处理下一行。
- lower:转小写
- upper:转大写
- substr:截取字符串(被截取的字符串,起始下标,截取长度)
- 下标从1开始,没有0
- length:取字符串长度
- concat:字符串拼接
- trim:去前后空格
- str_to_date:字符串转日期
- date_format:格式化日期
- format:设置千分位
- round:四舍五入
- round(123.123,0) 保留0位小数,
- 注意:正数是小数,负数对应了十百千万... -2是百位
- rand:随机数
- case ... when ... then ... when ... then ... end:
- select name,job,sal as oldsalary,(case job when ‘MANAGER‘ then sal1.1 when ‘SALEMAN‘ then sal1.5 end) as newsalary
- ifnull:将null值转为一个具体的值
- ifnull(数据,被当做那个值)
- distinct:只能出现在所有字段的最前方
分组函数(多行处理函数)
多个输入,一个输出。
- sum
- count
- avg
- max
- min
注意:
? 1.分组函数在使用的时候必须先进行分组,然后才能调用。若没分组,则整张表默认为1组。
? 2.分组函数自动忽略null,不需要提前对null进行处理
? 3.分组函数中 count(*) 和 count(字段) 有什么区别?
? count(具体字段) :统计所有不为null的行数
? count(*) :统计所有行数
查询语句执行顺序
- from
- where
- group by
- having
- select
- order by
为什么分组函数不能直接使用在where后面?
- 因为分组函数在使用的时候必须先分组。where执行的时候还没有分组。
分组查询
- group by 之后可以跟多个字段
- 参与分组的字段可以select,
- 分组函数可以select,
having
- having和group by必须联合使用
- 能使用where的优先使用where(优化策略) where只适合使用表里面已知的字段
连接查询
-
内连接
- 等值连接:表之间有字段值相等
- 非等值连接:表连接有字段值不相等
- 例如:员工表[emp](name,salary)和工资登记表[sal_gra](salary_grade,low_grade,upper_grade)
- select e.name,e.salary,sg.salary_grade from emp e inner join sal_gra sg on e.salary between sg.low_grade and sg.upper_grade;
- 自连接:一张表看做事两张表
-
外连接
- 左连接
- 右连接