Msql常用命令:
本地登录:
mysql -uroot -proot
退出mysql:
exit;
showdatabase;
use xxx;
show tables;
desc xxx;
SQL语言分类
-
DML(Data Manipulation Language)数据操纵语言
如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete
DDL(Data Definition Language)数据库定义语言
如:create,drop,alter之类,主要是对表结构进行操作。
DCL(Data Control Language)数据库控制语言
如:grant、deny、revoke等,只有管理员才有相应的权限
DQL(Data Query Language)数据库查询语言
如: select 语法
注意:SQL不区分大小写
sql文件相关操作:
1.导入
先use一个数据库然后
source + 直接拖进去
2.查询表中所有数据
select* from + 表名
3.不看表的数据,只看表的结构
desc + 表名
4.查看数据库版本号+使用数据库
select version();
select database();
5.\c 用来终止输入
简单查询:
查询字段(列):
select 字段名1,字段名2 from 表名
强调:sql 以; 结尾,不区分大小写
select * from 表名 ;
效率低,可读性差,不建议开发写
给查询的列起别名:
select 字段名1,字段名2 as 别名 from 表名;(as)可以省略
注意只是将显示的查询结果显示,原表名字不会更改
如果别名里相加空格,就用单引号括起来
注意:所有数据库中,字符串统一用单引号
注:字段名 可以 + - x /
条件查询:
查询符合条件的数据:
select
字段
from
表名
where
条件
sal >=800 and sal<=3000;
sal between 800 and 3000;【】闭区间,包括两端的值
使用between and 时 必须左小右大
都有哪些条件:
= ,< ,> ,!= , <>, <=, >=,between and ,>= adn <=,
is null,is not null,
select empno,ename from emp where sal=800;
等号可以运用在字符串上
or:
select ename,job from emp where job=’manager‘ or job=’salesman‘;
and 和 or同时出现:and优先级高
select ename, job from emp where sal >2500 and deptno =10 or deptno =20;会按一下顺序执行:
select ename, job from emp where (sal >2500 and deptno =10) or deptno =20;
正确执行方式:
select ename, job from emp where sal>2500 and (deptno =20 or deptno=10);
in:相当于多个or,但不是多个区间,in后面跟的是具体的值
select empno,ename,job from emp where job in('manager' ,"salesman");
select empno,ename,job from emp where job='manager' or job="salesman";
like:模糊查询
%和_是特殊的符号,
%:任意多个字符,也可能是一个
_:任意一个字符
找出名字中含有o的:
select ename from emp where ename like '%o%';
以t结尾:
select ename from emp where ename like '%t';
以k开始:
select ename from emp where ename like 'k%';
第二个字母是a:
select ename from emp where ename like '_a%';
第三个字母是r:
select ename from emp where ename like '__r%';
找出含有_的名字:
select ename from emp where ename like '%\_%'
\转义,不然会全都查找出来
排序:
默认是升序:
select ename,sal from emp order by sal (asc);默认不写就是升序
降序:
select ename,sal from emp order by sal desc;(descend)
按照薪资升序排列,如果薪资一样,按照名字升序排列:
select ename,sal from emp order by sal,ename;
注:sal在前起主导,只有sal相等情况下才轮到ename
小综合:
select
ename,sal
from
emp
where
sal between 1250 and 3000
order by
sal desc;
数据处理函数,单行处理:
又叫单行处理函数:
特点:一个输入对应一个输出,
和单行处理函数相对的是多行处理函数:多个输入对应一个输出。
常见的单行处理函数:
lower:
select lower(ename) from emp;
upper:
select upper(ename) as ename from emp;
substr:
select substr(ename,1,3) as ename from emp;
起始下标从1开始
找出名字第一个字母是a的:
第一种:模糊查找:
select ename from emp where ename like 'a%';
第二种:
select ename from emp where substr(ename,1,1) ='a';
concat:字符串拼接
select concat(substr(ename,1,1),lower(substr(ename,2,length(ename))))
from emp;
length:上面那个
trim:
select * from emp where ename = trim(' king ');
去掉前后空格
round:
select round(123.23153,3) from emp;
四舍五入保留小数位
select round(1236.23153,-1) from emp; //1240
rand:
select rand() from emp;
select round(rand()*100) from emp;
null:
null参与运算最后结果都是null
select ename,(ifnull(comm,0)+sal)*12 from emp;
case..when...then...when...then...else...end
当工作岗位是manager,工资上调10%
当工作岗位是salesman时,工资上调50%
注意:不修改数据库,只是将查询结果显示显示出来
select ename,job, (case job when 'manager' then salx1.1 when 'salsman' then sal*1.5 else sal end ) as sal from emp;
分组函数,多行处理函数:
输入多行最终输出一行
5个:
count 计数
sum 求和
avg 平均值
max 最大
min 最小
注意:分组函数必须先进行分组才能用!!!
如果没有分组,整张表默认为一组
注:分组函数自动忽略null,不需要对null提前处理。
count(*)数全部的行
count(字段)统计该字段下不为null的元素总数
分组函数不能直接使用在where中??????????????????
所有的分组函数可以组合起来一起用
分组查询*****
先进行分组,再对每一组的信息操作
select
**...**
from
...<