Mysql基本操作
二、删除已经有的数据库school
三、创建新数据库myschool
四、进入到myschool中
五、查看myschool库中所有的表
六、新建一张student表
七、查看student表结构
八、插入两个学生的信息
九、再次查询表中数据
十、给student表添加两列:age和sex,age默认值为0,sex默认值为’m’
十一、给student表插入zhangsan这个学生信息,性别与age都使用默认值
十二、给student表插入zhansan这个学生信息,性别与age不使用默认值
十三、修改sex列的类型由char(4)改为char(8)
十四、修改sex列名为gender
十五、修改表名由student变为stu
十六、新建表score
十七。给score设置联合主键(stuId,subject)
十八、给score设置外健列stuId,使它引用stu表的id
十九、给score表添加四行数据,分别是tome,jim,zhangsan的C++和Java考试成绩
二十、再添加一条10号学生的java成绩(其实这个学生在stu表中根本不存在,我们用此操作引发的错误来验证联合主键与外键)
二十一、修改所有学生C++考试成绩都为100
二十一、为了不重名,我们修改score表中的score列名为exam_score
二十二.修改1号学生C++,Java考试成绩都为89
二十二.只修改1号学生Java考试成绩都为30
二十三,删除学号为2的学生的Java成绩
二十三,删除学号为3的学生的所有成绩
二十四、为了测试的需要,再给学生表添加5条数据
二十五、修改tom的age为21,jim为22岁
二十六、查询5号学生的全部信息(共4列)
二十七、查询5号学生的学号和姓名信息(2列)
二十八、查询小于5号(不包括5号)学生的学号和姓名信息(2列)
二十九、查询小于5号(包括5号)学生的学号和姓名信息(2列)
三十、查询大于5号(不包括5号)学生的学号和姓名信息(2列)
三十一查询大于5号(包括5号)学生的学号和姓名信息(2列)
三十一查询大于3号(包括3号)且小于7(包含7号)学生的学号和姓名信息(2列)
三十一查询大于3号(包括3号)且小于7(包含7号)学生的学号和姓名信息(2列)用between....and
三十二、查询3,5,7,9号学生学号和姓名信息(2列)
三十二、查询3,5,7,9号学生学号和姓名信息(2列)
用in运算符
三十三、查询不是3,5,7,9号学生学号和姓名信息(2列)
用not in运算符
34.若某一列可以为null,如果输入null值呢?
当你插入一行新数据的时候,忽略想输入null值的列,则它的值自然就是null.也可以赋值时给个NULL,但NULL绝不能加双引号,比如”NULL”,那成了字符串,是有数据的,只不过内容是NULL. 可以通过如下方式验证: |
查询学生表中性别不为null的信息
查询姓名是以”s”开头的学生信息
查询姓名中第2个字母是s的学生信息
查询姓名由5个字母构成的学生记录
查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
查询姓名中包含“a”字母的学生记录
创建部门表dept
创建员工表emp
查询出部门编号为30的所有员工
只查询emp表中的job列
发现有大量的重复结果
去除重复记录
想去除重复记录,需要使用DISTINCT:
查看雇员的月薪与佣金之和
发现了问题,如smith的月薪和佣金之和是null
comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:
SELECT *,sal+IFNULL(comm,0) FROM emp;
可以给查询结果列起列名(别名)
给列起别名
给表起别名
起别名时,可以加as,也可以省略不写
查询所有员工记录,按sal升序排序
若是升序排列,asc可以不写
查询所有员工记录,按sal降序排序
查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
查询某列(sal列)的工资和(纵向运算)
查询某列(sal列)的工资平均值
查询某列(sal列)的工资最高值
查询某列(sal列)的工资最低值
统计有工资的员工总数
统计有奖金的员工总数
统计共有员工数量
在一个sql语句中同时使用多个聚合函数
在一个sql语句中同时使用多个聚合函数
我想查询一下每个部门共几个员工?(分组+聚合函数)
分组要用到一个关键字(group by)
先分组后统计
我想统计一下每个部门工资总数和平均数?(分组+聚合函数)
我想查询一下10号部门共几个员工?(分组+聚合函数)
分组后若要再加条件(过滤),就不能使用where,而要使用having(即group by后面不能出现where,只能出现having)
统计一下10号部门工资总数和平均数
查询所有员工的员工编号,姓名,所在部门的部门名称,及部门所在城市
两张表连接查询还可以细节分出两大类:
外连接
左外连接:以左表作为基准(左表中的数据必须全部显示,右表中和左边有关的数据才显示,无关的数据不显示)
右外边接: 以右表作为基准(右表中的数据必须全部显示,左表中和右边有关的数据才显示,无关的数据不显示)
内连接:既不以左表为基准,也不以右表为基准,而是把两张表相关的数据配合显示
分页查询
Limit
LIMIT用来限定查询结果的起始行,以及总行数。
查询出部门编号为30的所有员工
所有销售员的姓名、编号和部门编号。
找出奖金高于工资的员工。
找出奖金高于工资12%的员工。
找出部门编号为10的所有经理,和部门编号为20的所有销售员的详细资料。
找出部门编号为10的所有经理,和部门编号为20的所有办事员的详细资料。
找出部门编号为10中所有经理,部门编号为20中所有办事员,还有既不是经理又不是办事员但其工资大或等于2000的所有员工详细资料
无奖金或奖金低于1000的员工。
查询名字由四个字组成的员工。
查询1981年入职的员工。
查询所有员工详细信息,用编号升序排序
查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序
查询每个部门的平均工资
查询每个部门的雇员数量。
查询每个工种的最高工资、最低工资、人数
从事同一工作雇员的月工资的总和
显示非销售人员工作名称以及从事同一工作雇员的月工资的总和
子查询
对于某些复杂的查询,我们可以先查询出一个结果集,然后将此结果集当做一张虚拟表,然后再从这张虚拟表中进行更进一步查询。获得最终要的结果。
那么能查询出虚拟表的那条查询sql就称为子查询.
例如:查询出部门编号为30的所有员工
|
经验:通过子查询你可以实现层层过滤
查询20部门所有员工详细信息,用工资降序排序。
|
查询20号部门中没有奖金但工资大于2000的员工
显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于5000,输出结果按月工资的合计降序排列
有奖金的工种。
查出至少有4个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
列出所有员工的姓名及其直接上级的姓名。
列出入职日期早于直接上级的所有员工的编号、姓名、部门名称。
列出部门名称和这些部门的员工编号和员工姓名,同时列出那些没有员工的部门。
列出最低薪金大于3000的各种工作及从事此工作的员工人数。
列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导。
显示员工的编号,姓名,职位,所在部门的名称
创建一个视图,将上面查询出来的虚拟表“固化”到数据库,可以永久保持。
在已有视图上定义新视图
删除视图
创建视图时可以指定视图中出现的列的列名(相当于物理列的别名)
创建一个视图,用来展示每个部门员工人数
下面先改一下mysql的分隔符
创建一个存储过程,用来查询stu表
调用上面的存储过程
删除存储过程
存储过程也可以像java一样定义局部变量
create procedure pro2() begin declare v_id int; set v_id=12; select * from stu where id=v_id; end;
|
存储过程也可以像java一样具有条件分支(流程控制)
存储过程也可以像java一样具有循环
存储过程也可以像java一样定义形参,不过,它的形参分两种,有输入形式,有输出形参,用in和out关键字区分
形参可以定义多个
定义有输出参数和输入参数的存储过程
调用存储过程,传入7788,定义系统变量@sal,用来存储返回值,然后用select打印出来
mysql存储过程很像java中无返回值的方法
mysql函数很像java中有返回值的方法
因为存储过程可以不返回,但函数必须有返回值,必须返回
注意:在begin上面的return必须加s
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341