4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)
mysql數據庫創建,表創建模等模板腳本
--用root用戶登錄系統,執行腳本 ? --創建數據庫 create database mydb61 character set utf8 ; ? --選擇數據庫 use mydb61; ? --增加 dbuser1用戶 --??? 創建用戶‘dbuser61’密碼為‘dbuser61’擁有操作數據庫mydb61的所有權限 ????????GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED BY "dbuser61"; ????????flush privileges; ? -- grant select,insert,update,delete on mydb61.* to dbuser61@localhost identified by "dbuser61"; -- grant select,insert,update,delete on mydb61.* to dbuser61@'%' identified by "dbuser61"; ? --創建表 ? --創建部門表并賦值 DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept`( ????????`deptno`???? int(2) PRIMARY KEY, ???????`dname`?????? varchar(14) NOT NULL, ???????`loc`??????? varchar(13) )DEFAULT CHARSET=utf8; ? 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'); ? commit; ? --注意mysql的sql語言約束如果起名字,需要單獨寫在表后面 --創建員工表并賦值 DROP TABLE IF EXISTS `emp`; CREATE TABLE `emp`( ????????-- `empno`?????????? int(4) constraint emp_empno_pk PRIMARY KEY, ????????`empno`?????????? int(4) PRIMARY KEY, ????????`ename`????????? ??????? varchar(10) NOT NULL, ????????`job`??????????? varchar(9), ????????`mgr`??????????? ??????? int(4), ????????`hiredate`?????? ? DATE, ????????`sal`??????????? int , ????????`comm`?????????? ?????? int, ????????`deptno`??????? ?? int(2) , ????????constraint emp_deptno_fk? foreign key(deptno) references dept(deptno) )DEFAULT CHARSET=utf8; ? --創建索引 -- CREATE?INDEX MYSCOTT.IX_CAtbAuditOperInfo_OT ON MYSCOTT.EMP(ENAME) TABLESPACE ts_myscott2; create index emp_ename_index on emp(ename); ? --注意日期格式不一樣 INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20); INSERT INTO emp VALUES(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30); -- INSERT INTO emp(empno, ename, job, mgr, hiredate, sal,?deptno) VALUES(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 30); INSERT INTO emp VALUES(7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);??????????? INSERT INTO emp VALUES(7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20); INSERT INTO emp VALUES(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30); INSERT INTO emp VALUES(7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30); ??????????? INSERT INTO emp VALUES(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10); INSERT INTO emp VALUES(7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20); INSERT INTO emp VALUES(7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10); ??????????? INSERT INTO emp VALUES(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30); INSERT INTO emp VALUES(7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, NULL, 20); INSERT INTO emp VALUES(7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30); ??????????? INSERT INTO emp VALUES(7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20); INSERT INTO emp VALUES(7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10); commit; ? --創建工資級別表并賦值 DROP TABLE IF EXISTS `salgrade`; CREATE TABLE `salgrade`( ???????`grade`??????? ???? int, ???????`losal`?????????? int, ???????`hisal`?????????? int )DEFAULT CHARSET=utf8; ? INSERT INTO salgrade VALUES(1, 700, 1200); INSERT INTO salgrade VALUES(2, 1201, 1400); INSERT INTO salgrade VALUES(3, 1401, 2000); INSERT INTO salgrade VALUES(4, 2001, 3000); INSERT INTO salgrade VALUES(5, 3001, 9999); commit; ? --創建獎金表 DROP TABLE IF EXISTS `bonus`; CREATE TABLE bonus( ????????`ename`????? VARCHAR(10), ???????`job`?????? VARCHAR(9), ???????`sal`????? ????? int, ???????`comm`????? int )DEFAULT CHARSET=utf8; ? commit; |
?
mysql_SQL99標準的連接查詢(內連接,外連接,滿外連接,交叉連接)
使用SQL99標準的連接查詢(JOIN..ON..)
????????內連接(innerjoin等價于oracle中的“逗號”,下面的on替換掉了where)
??????????????????只返回滿足連接條件的數據(兩邊都有的才顯示)。
Mysql | Oracle |
????????select e.*, d.* ??????????????????from emp e ??????????????????inner join dept d ??????????????????on e.deptno=d.deptno | select e.*, d.* ??????????????????from emp e, dept d ??????????????????where e.deptno=d.deptno; |
--也可以省略inner關鍵字。
?
????????左外連接
??????????????????左邊有值才顯示。
Mysql | Oracle |
select e.*, d.* ??????????????????from emp e ??????????????????left outer join dept d ??????????????????on e.deptno=d.deptno | select e.*, d.* ??????????????????from emp e ??????????????????, dept d ??????????????????where e.deptno=d.deptno(+) |
--也可以省略outer關鍵字
?
????????右外連接
??????????????????右邊邊有值才顯示。
Mysql | Oracle |
select e.*, d.* ??????????????????from emp e??????????????? ??????????????????right outer join dept d ??????????????????on e.deptno=d.deptno | select e.*, d.* ??????????????????from emp e ??????????????????, dept d ??????????????????where e.deptno(+)=d.deptno |
--也可以省略outer關鍵字
?
????????滿外聯接
??????????????????任一邊有值就會顯示。
??????????????????selecte.*, d.*
??????????????????fromemp e
??????????????????full outer join dept d?????????????????
??????????????????one.deptno=d.deptno
??????????????????--也可以省略outer關鍵字
????????
????????交叉連接:
??????????????????叉集,就是笛卡爾積
??????????????????selecte.*, d.*
??????????????????fromemp e
??????????????????crossjoin dept d
??????????????????--沒有連接條件
?
eg:查詢員工信息,員工號,姓名,月薪,部門名稱 ????????select e.empno, e.ename, e.sal, d.dname ????????from emp e, dept d ????????where e.deptno=d.deptno ? ????????select e.empno, e.ename, e.sal, d.dname ????????from emp e inner join dept d? -- 逗號join ???????on e.deptno=d.deptno??? -- where on ? //顯示所有部門信息 //顯示各個部門的部門人數 ????????select d.deptno 部門號, d.dname部門名稱,count(e.empno)人數 ????????from emp e, dept d ????????where e.deptno(+)=d.deptno ????????group by d.deptno, d.dname ? ????????select d.deptno 部門號, d.dname部門名稱,count(e.empno)人數 ????????from emp e right outer join dept d ????????on e.deptno=d.deptno ????????group by d.deptno, d.dname ? 自連接: --查詢員工信息 ,老板信息 ????????顯示:??****的老板是**** select e.ename , b.ename ????????from emp e, emp b ????????where e.mgr=b.empno ? select concat ( concat(e.ename, '的老板是'), b.ename) ????????from emp e, emp b ????????where e.mgr=b.empno ? select e.ename, ifnull(b.ename,'他自己') ????????from emp e left outer join emp b ????????on e.mgr=b.empno ? select concat ( concat(e.ename, '的老板是'), ifnull(b.ename,'他自己')) ????????from emp e left outer join emp b ????????on e.mgr=b.empno +------------------------------------------------------------------------+ | concat ( concat(e.ename, '的老板是'), ifnull(b.ename,'他自己'))???????| +------------------------------------------------------------------------+ | SMITH的老板是FORD?????????????????????????????????????????????????????| | ALLEN的老板是BLAKE????????????????????????????????????????????????????| | WARD的老板是BLAKE?????????????????????????????????????????????????????| | JONES的老板是KING?????????????????????????????????????????????????????| | MARTIN的老板是BLAKE???????????????????????????????????????????????????| | BLAKE的老板是KING?????????????????????????????????????????????????????| | CLARK的老板是KING?????????????????????????????????????????????????????| | SCOTT的老板是JONES????????????????????????????????????????????????????| | KING的老板是他自己????????????????????????????????????????????????????| | TURNER的老板是BLAKE???????????????????????????????????????????????????| | ADAMS的老板是SCOTT????????????????????????????????????????????????????| | JAMES的老板是BLAKE????????????????????????????????????????????????????| | FORD的老板是JONES?????????????????????????????????????????????????????| | MILLER的老板是CLARK???????????????????????????????????????????????????| +------------------------------------------------------------------------+ ? aaaaddd???ccccbbbbbb aaaaddd???ccccbbbbbb aaaaddd???ccccbbbbbb aaaaddd???ccccbbbbbb ? 方法:按住alt鍵以后,鼠標拖動,選中一個矩形區域 ? |
?
總結
以上是生活随笔為你收集整理的4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘安装系统后鼠标用不了怎么回事 U盘安
- 下一篇: 6.(Mysql数据管理相关)连接MYS