Mysql基本操作

database

二、删除已经有的数据库school

三、创建新数据库myschool

四、进入到myschool

五、查看myschool库中所有的表

六、新建一张student

七、查看student表结构

八、插入两个学生的信息

九、再次查询表中数据

十、给student表添加两列:agesex,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,zhangsanC++Java考试成绩

二十、再添加一条10号学生的java成绩(其实这个学生在stu表中根本不存在,我们用此操作引发的错误来验证联合主键与外键)

二十一、修改所有学生C++考试成绩都为100

二十一、为了不重名,我们修改score表中的score列名为exam_score

二十二.修改1号学生C++,Java考试成绩都为89

二十二.只修改1号学生Java考试成绩都为30

 

二十三,删除学号为2的学生的Java成绩

二十三,删除学号为3的学生的所有成绩

二十四、为了测试的需要,再给学生表添加5条数据

二十五、修改tomage21jim22

二十六、查询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

三十二、查询3579号学生学号和姓名信息(2列)

三十二、查询3579号学生学号和姓名信息(2列)

in运算符

 

三十三、查询不是3579号学生学号和姓名信息(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一样定义形参,不过,它的形参分两种,有输入形式,有输出形参,用inout关键字区分

形参可以定义多个

定义有输出参数和输入参数的存储过程

调用存储过程,传入7788,定义系统变量@sal,用来存储返回值,然后用select打印出来

mysql存储过程很像java中无返回值的方法

mysql函数很像java中有返回值的方法

因为存储过程可以不返回,但函数必须有返回值,必须返回

注意:在begin上面的return必须加s

 

 

 

 

 

 

 

 

以上是 Mysql基本操作 的全部内容, 来源链接: utcz.com/z/532081.html

回到顶部