SQL语句查询练习
红色:解释说明
DOS系统登陆mysql mysql -u root -P(记得中间有空格)
一:数据库的增删改查
1.创建一个表
Create from 表名(
uid_id primary key auto_incremeent,
Username varchar(20) not null unique,
Pat int not null
);
2.普通查询
增:insert into 表名values(值1,值2)
添加列语法如下:
Alter table 表名添加列名添加列的类型;
如果要添加那个列的后面sql语法如下:
Alter table 表名添加列的名称添加列的类型after (添加那个类的后面本列名)
删:delect from 表名where id=?
批量删除delete from 表名where id(字段名)between
2 and 18;
改:update 表名set age=25 where username=’’张三’
查:select*from 表名查询所有
查询男生总数sql如下:
Select count(*)from 表名where sex=”男”
按性别进行分组
Select set from 表名group by sex;
每种性别的人数
Select set count(*)from 表名group by sex;
性别人数大于2
Select sex from 表名group by sex having count (sex)>2;
Having-------条件表达式
#select max(sal) from emp
#select COUNT(empno) from emp;
#select ename '姓名',sal'工资' from emp
#SELECT ename, sal from emp where sal =(select max(sal) from emp )
#select ename,sal from emp where sal=(select max(sal) from emp )
#select sal from emp where sal>(select sal from emp wehere ename='周杰伦' )
#select ename,grade from emp where grade in (select grade from emp where grade='经理') select ename ,grade from emp where grade in(select grade from emp where grade='经理')
查询user表中每个班级有多少人
select count(*) from user group by classNum; 表示字段中的班级
求总数
SELECT count(字段名|*) FROM 表名;
查找并去重
Select distinct*from 表名
#分组
Group By通常与GROUP_CONCAT(字段名)联合函数使用
语法:
Select 字段名1,GROUP_CONCAT(字段名2) FROM 表名GROUP BY 字段1 #排序(默认升序ASC)
升序语法
Select*from 表名order by 字段名,(可有多个字段名)
降序排序
Select*from 表名order by 字段名(可有多个字段名)desc
3.条件查询
And 并且
语法:select*from 表名where sal>1600 and sal <2000
Or 或者
Select *from 表名where sal >1500 or sal<2000
In代表在这个取值中只要有一个匹配就符合条件
Select*from 表名where sal in(2000,3000,2500)
Not iN 不在这个取值范围区间内
Select*from 表名where sal not in(2000,3000,2500)
判断一个字段的数值是否为null 需要用到关键字is
语法:
Select*from 表名where 字段名is null
判断一个字段不为null 用到关键字is not
Select*from 表名where 字段名is null
4.mysql 函数
FI (圆周率)
语法
FLOOR(X) 取整数部分
语法:select FLOOR(x) from 表名where id=1
CEILING(x)只要小数不是0就向个位进以为
语法select CEILING(x) from 表名where id=1
ROUND(x,y)对有小数的整数的小数进行四舍五入
Select ROUND(sal,1) from emp where id= 1
TRUNCATE(X,Y) 直接将小数部分去掉
Select ROUND(sal,1) from emp where id= 1
5.聚合函数:
Max :返回指定列的最大值
Min; 返回指定列的最小值
sum :返回指定列的和
Avg:返回指定列的平均值
Count:返回指定列中非NULL值/并且将个数返回回来
解释:case when num =1 then num end
case(筛选) when(当) num=1(时的数据) then(然后) num(想要获取的字段) end(结束)
示例:select count(case when sex='男' then sex end) as '男' , count(case when sex='女' then sex end) as '女' FROM emp 计算公司工资最高的工资
Select max(sal) from 表名
系统信息函数:
Select version();
Select connection();
Select schema();
Select user();
加密函数:
Md5加密语法:
Insert into 表名values (‘用户名’,md5(pws1));
--------pwd 为设置的密码(自定义)
怎样验证加密的密码是正确的呢
Sql语句语法:
Select*from 表名where username=‘user1’and password=md5(‘pwd1’);
Password 加密方式单项不可逆的(一般是给mysql数据库的密码加密使用的)Dos系统修改mysql数据库的密码
set password=password(‘新密码’)
字符串函数:
Select CONCAT(ename,sal )空格的薪水是
示例:黄运树的薪水是5000
日期函数
语法:
Select year(字段名)from 表名
6.分组函数
注意一点:如果使用分组函数如果不在分组函数的字段必须存在group by 后面
语法:select max(sal),部门字段from 表名group by 部门字段按照部门来分类7.子查询
就是一个查询的结果可以作为另一个查询的数据源或者条件
查询贵公司中薪水最高人的姓名和具体薪水的工资
语法:select ename,sal from 表名where sal=(select max(sal)from emp)
查询出公司职位是经理和她的姓名
Select ename ,grade from emp 表名where grade in(select grade from emp where grade=’经理’)
8.多表查询
我想查询员工的姓名和员工所在的部门
笛卡尔积
表联合
左外联合(左边表中如果存在记录没有匹配到还想显示出来)
语法:select m.ename,e.ename from emp m left join emp e on e.empno=m.mgr
右外连接(左边表中如果存在记录没有匹配到还想显示出来)
:select m.ename,e.ename from emp m right join emp e on e.empno=m.mgr 内连接的语法结构:
9.左(右)外连接的语法结构:
Select +字段列表+from+表名1 +left|right+[outer]+join +表名2 on join_condition1(为两个表的连接条件);
存储过程:
存储过程是sql语句和流程控制语句的预编译集合并以一个名称存储并作为一个单元来处理
语法结构:
Create[创建] + procedure[存储过程]+ 自定义存储过程名称([proc_parameter])[characteristics......]+routine_body Characteristics:指定存储过程的特性
Proc_parameter指定存储过程的参数列表,形式如下:
[IN|OUT|INOUT] param_name type
In:输入参数如果没有指定默认的为输入参数
Out:输出参数
Inout:输入输出参数
Param_name:参数名称
Type:数据类型
Create procedure sele () select book_id,book_name,price,store from bookinfo 创建存储过程
Call sele 调用存储过程
事务:
事务有一个或多个sql语句组成的一个不可分割的整体sql语句之间相互依赖,要目全部执行要么全都不执行
事务必须满足的四个条件:
Atomicity 原子性:失误是一个原子性操作单元对数据的修改要么一起执行要么一起不执行Consistency 一致性:数据开始和完成的时候数据都保持一致
Loslation 隔离性:一个事务的影响一个事务在提交之前对其他事务是不可见的
Durability 持久性:事务完成之后对数据的修改是永久性的
控制事务处理:
ROLLBACK:回滚会结束用户是的事务并撤销正在进行的所有未提交的修改
COMMIT:会提交事务,并使已对数据库进行的修改成为永久性的
SAVEPOINT identifier:允许在事务中在创建一个保存点,一个事务中可以有多个SAVEPOINT ROLLBACK TO ID identtifier:把事务回滚到标记点
代码演示: