SQL学习:SQLCookBook源代码-mysql版本(1)

来源:互联网 发布:淘宝介入买家举证流程 编辑:程序博客网 时间:2024/05/20 23:36

这几天在熟悉数据库,选择的语言是mysql,因为这个数据库是免费的,现在很多企业都在使用它,所以就打算先学这个。找了本书sqlcookbook,书里面的代码适用于在sql、mysql、oracle下运行,不过会有些微的差别,在网上找了一圈也没找到书上的源代码下载,就找到了一点点代码,还是sql server下运行的,所以就手动修改了这些代码,把他改成适合mysql运行的语句,同时自己根据书上的内容编写了之后几章的mysql语句。目前学到第四章了~这书够厚的。。考虑到后期想去找实习,估计只会看一点,之后再慢慢补大笑

本篇博文附上的代码脚本并不是顺序执行来产生一个结果的,是一条条独立的语句,每条语句都附上了解释,易于学习。然后并不是严格按照cookbook的顺序来的,嘿嘿,因为我有时喜欢跳着看,不过大部分语句都会有前后关系就是了~所以可能后面又会更新前几个empanddept,所以如果大家要下载最新版的话还是用github比较好哦,每次都是最新的




附上代码:

(代码也上传到了github上,需要的可以直接clone,地址附在最下)

PS:代码文件EmpAndDept1-3主要是网上百度下载到的,忘了是在哪里下的了。。先谢谢这位大哥了(应该不会是妹子吧,啊哈),我添加了一些,然后从EmpAnd4开始都是我自己写的。为了表示对这位大哥的尊敬,代码的命名就为EmpAndDept1-n吧(笑)

PPS:记得用文本编辑器打开,毕竟这些语言并不是顺序执行的,只是让大家熟悉操作的,这相当于是用代码的方式来学习!

以下先更新EmpAndDept1


<span style="font-size:14px;">--EmpAndDept1--初次登录数据库及简单的表格查询--win 7 环境--mysql 5.6.x version--语句已修改成mysql专用--先启动mysql数据库服务器,才能进入mysql--方法是用管理员模式运行cmd,在mysql的bin文件夹里使用net start mysql启动,或者在mysql文件夹的bin里输入mysqld,这是mysql提供的打开服务的命令(不用管理员模式)--启动后可输入mysql -h localhost -u root -p 进入数据库,这时需要密码,刚安装好后默认密码是空,按enter就行--进入数据库--修改密码,用update函数update mysql.user set password=PASSWORD(1991423) where user='root';--创建数据库cookbookcreate database cookbook;--显示所有的数据库show databases;--进入数据库use cookbook;--显示所有的表格show tables;--创建dept表,将表格的格式设置为InnoDB,,mysql默认的格式myisam,这种表格的操作速度快,但是不能设置外键--修改为适合mysql的代码create table dept(deptno int primary key,  --设置成主键dname nvarchar(30),loc nvarchar(30))engine=InnoDB;--查看dept表格的列情况describe dept;--创建empcreate table emp(empno int primary key, ename nvarchar(30), job nvarchar(30), mgr int, hiredate datetime, sal numeric(10,2), comm numeric(10,2), deptno int,  --需要先声明才能在下面作为外键 foreign key (deptno) references dept(deptno) on delete cascade)engine=innoDB;--针对外键请注意--  ①外键只能指向主键--  ②外键和主键的数据类型要一致insert into dept values(10,'accounting','new york');insert into dept values(20,'research','dallas');insert into dept values(30,'sales','chicago');insert into dept values(40,'operations','boston');--以下的语句书写方式会按照emp后面的括号里面的顺序来输入insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7934,'miller','clerk',7782,'1982-1-23',1300.00,10);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7902,'ford','analyst',7566,'1981-12-3',3000.00,20);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7900,'james','clerk',7698,'1981-12-3',950.00,30);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7876,'adams','clerk',7788,'1987-5-23',1100.00,20);insert into emp values(7844,'turner','salsman',7698,'1982-9-8',1500.00,0.00,30);insert into emp(empno,ename,job,hiredate,sal,deptno) values(7839,'king','president','1981-11-17',5000.00,10);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7788,'scott','analyst',7566,'1987-4-19',3000.00,20);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7782,'clark','manager',7839,'1981-6-9',2450.00,10);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7698,'blake','manager',7839,'1981-5-1',2850.00,30);insert into emp values(7654,'martin','salsman',7698,'1981-9-28',1250.00,1400.00,30);insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7566,'jones','manager',7839,'1981-4-2',2975.00,20);insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500.00,30);insert into emp values(7499,'allen','salseman',7698,'1981-2-20',1600.00,300.00,30);insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values(7369,'smith','clerk',7902,'1980-12-27',800.00,20);--从储存成文本格式的文件中直接写入数据库,如:LOAD DATA LOCAL infile ‘D:/pet.txt’      INTO TABLE emp                 lines terminated BY ‘\r\n’--每行间要用换行符隔开--查询所有列select * from emp;select * from dept;--查询指定列--select 字段1,字段2 from 表名 where 条件--如:查询smith 的薪水,工作和所在部门select sal,job,deptno from emp where ename='smith';--如何取消重复行(distinct只会消除完全相同的行)--select distinct 字段 from 表名 where 条件--如:统计共有多少个部门编号?select distinct deptno from emp;--使用算术表达式--显示每个雇员的年工资select ename,sal*13 '年工资' from emp;--更精确的表达(加上奖金),如何处理NULL问题select ename ,sal*13+isnull(comm*13,0) 年工资 from emp;--使用where子句--显示工资高于3000的员工select * from emp where sal>3000;--查找1982.1.1后入职的员工select * from emp where hiredate>'1982.1.1';--显示工资在2000和2500之间的select * from emp where sal between 2000 and 2500;select * from emp where sal>2000 and sal<2500;--如何使用like操作符(模糊查询),like后面的是正则表达式,不懂的可百度下,使用规则都大同小异--只是注意,当添加了^或$作为开头和结尾的匹配时,like要改写成regexp才行--显示首字符为S的员工姓名和工资select ename,sal from emp where ename like 'S%';--显示第三个字符为O的所有员工姓名和工资select ename,sal from emp where ename like '__O%';--如何显示empno为123,345,800...的雇员情况--可以这样 select * from emp where empno=123 or empno=345 or empno=800--但是这样效率太低,处理这种情况,一般用 in 关键字select * from emp where empno in(123,345,800);--is null 的使用--显示没有上级雇员的情况select * from emp where mgr is null;--使用逻辑操作符号-- 查询工资高于500或者岗位为MANAGER雇员,同时还要满足他们姓名首字母为Jselect * from emp where (sal>500 or job='manager') and ename like 'j%';--order by 子句,默认升序,降序时用 order by desc--按工资从低到高的顺序显示雇员的信息select * from emp order by sal desc;--按照入职的先后顺序排列select * from emp order by hiredate;--部门号升序,工资降序,order by 可以根据不同的字段排序select * from emp order by deptno,sal desc;--使用列的别名排序,如:把年薪算出来,年薪从低到高排序select ename,sal*13+isnull(comm) as nianxin from emp order by nianxin;--数据分组 max,min,avg,sum,count--显示最高和最低工资select min(sal) from emp;--如何显示相关信息,涉及到子查询select * from emp where sal=(select min(sal) from emp);--显示所有员工的平均工资和工资总和select avg(sal) 平均工资,sum(sal) 总工资 from emp;--找出高于平均工资的雇员的名字和他的工资select ename,sal from emp where sal>(select avg(sal) from emp);--找出高于平均工资的雇员的名字和他的工资,并显示平均工资--计算多少员工select count(*) from emp;--group by 用于对查询结果分组显示--having 子句用于限制分组显示结果--显示每个部门的平均工资和最高工资select avg(sal) 平均工资, max(sal) 最高工资,deptno from emp group by deptno;--显示每个部门的每种岗位的平均工资和最低工资select avg(sal),min(sal),deptno,job from emp group by deptno,job order by deptno;--显示平均工资低于2000的部门号和它的平均工资--having 往往和group by 结合使用,它可以对分组查询结果进行筛选select avg(sal),deptno from emp group by deptno having avg(sal)<2000;--显示平均工资高于2000的部门号和它的平均工资,并按照从低到高select avg(sal),deptno from emp group by deptno having avg(sal)>2000 order by avg(sal);</span>






mysql代码github地址:

https://github.com/databatman/SQLCookBook-MysqlVersion

PS:所有的mysql的EmpAnd1-n代码都会上传到这个文件夹,顺便求关注啊,虽然还是菜鸟一个,啊哈

1 0