关闭

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

标签: mysqlsqlcookbook数据库sql学习源代码
958人阅读 评论(0) 收藏 举报
分类:

这几天在熟悉数据库,选择的语言是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';

--创建数据库cookbook
create 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;


--创建emp
create 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雇员,同时还要满足他们姓名首字母为J
select * 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50597次
    • 积分:775
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:2篇
    • 译文:0篇
    • 评论:38条
    文章分类
    最新评论