SQL學習:SQLCookBook源代碼-mysql版本(1)

這幾天在熟悉數據庫,選擇的語言是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代碼都會上傳到這個文件夾,順便求關注啊,雖然還是菜鳥一個,啊哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章