欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:MySQL筆記

柚子快報(bào)邀請(qǐng)碼778899分享:MySQL筆記

http://yzkb.51969.com/

MySQL筆記_MySQL的再探

呈: MySQL筆記_MySQL的小試

連接查詢

多張表聯(lián)合查詢,連接方式: 1. 內(nèi)連接:等值連接、非等值連接、自連接。2. 外連接:左(外)連接、右(外)連接、全連接。 笛卡爾積:若兩張表進(jìn)行連接查詢 無過濾條件 則 條數(shù) 為 兩表?xiàng)l數(shù)乘積 找出 員工的部門名稱

mysql> select e.ename,d.dname from emp e ,dept d;

-- 上條 更好 且 需要起 別名 易于 分別 且效率更高 可讀性好

mysql> select ename,dname from emp,dept;

+--------+------------+

| ename | dname |

+--------+------------+

| SMITH | ACCOUNTING |

| SMITH | RESEARCH |

| SMITH | SALES |

| SMITH | OPERATIONS |

| TURNER | SALES |

| TURNER | OPERATIONS |

| ADAMS | ACCOUNTING |

| ADAMS | RESEARCH |

| ADAMS | SALES |

| ADAMS | OPERATIONS |

...

| MILLER | SALES |

| MILLER | OPERATIONS |

+--------+------------+

56 rows in set (0.01 sec) -- 56 = 14 * 4

ps:避免 笛卡爾積現(xiàn)象,同時(shí)不會(huì)減少記錄的匹配次數(shù),因而可以用來where,having加條件。

mysql> select e.ename,d.dname

-> from emp e , dept d

-> where

-> e.deptno = d.deptno;//92語法 不用

+--------+------------+

| ename | dname |

+--------+------------+

| CLARK | ACCOUNTING |

| KING | ACCOUNTING |

| MILLER | ACCOUNTING |

| SMITH | RESEARCH |

| JONES | RESEARCH |

| SCOTT | RESEARCH |

| ADAMS | RESEARCH |

| FORD | RESEARCH |

| ALLEN | SALES |

| WARD | SALES |

| MARTIN | SALES |

| BLAKE | SALES |

| TURNER | SALES |

| JAMES | SALES |

+--------+------------+

14 rows in set (0.01 sec)

內(nèi)連接

內(nèi)連接 --> 等值連接 條件是 等量關(guān)系 則可以分離條件

select e.ename, d.dname

from emp e

(inner)join dept d --inner 可以省略 帶上更清晰

on e.deptno = d.deptno;

+--------+------------+

| ename | dname |

+--------+------------+

| CLARK | ACCOUNTING |

| KING | ACCOUNTING |

| MILLER | ACCOUNTING |

| SMITH | RESEARCH |

| JONES | RESEARCH |

| SCOTT | RESEARCH |

| ADAMS | RESEARCH |

| FORD | RESEARCH |

| ALLEN | SALES |

| WARD | SALES |

| MARTIN | SALES |

| BLAKE | SALES |

| TURNER | SALES |

| JAMES | SALES |

+--------+------------+

14 rows in set (0.00 sec)

語法

select

e.ename,d.dname

from

emp e

join

dept d

on

連接條件

where

過濾條件

內(nèi)連接 --> 非等值 連接

select e.ename,e.sal,s.grade

from emp e

join salgrade s

on e.sal between s.losal and s.hisal;

+--------+---------+-------+

| ename | sal | grade |

+--------+---------+-------+

| SMITH | 800.00 | 1 |

| ALLEN | 1600.00 | 3 |

| WARD | 1250.00 | 2 |

| JONES | 2975.00 | 4 |

| MARTIN | 1250.00 | 2 |

| BLAKE | 2850.00 | 4 |

| CLARK | 2450.00 | 4 |

| SCOTT | 3000.00 | 4 |

| KING | 5000.00 | 5 |

| TURNER | 1500.00 | 3 |

| ADAMS | 1100.00 | 1 |

| JAMES | 950.00 | 1 |

| FORD | 3000.00 | 4 |

| MILLER | 1300.00 | 2 |

+--------+---------+-------+

14 rows in set (0.00 sec)

內(nèi)連接–>自連接

eg. 找到每個(gè)員工 的上級(jí)領(lǐng)導(dǎo)(13條記錄 忽略NULL)

select a.ename,b.ename

from emp a

join emp b

on a.mgr = b.empno;

+--------+-------+

| ename | ename |

+--------+-------+

| SMITH | FORD |

| ALLEN | BLAKE |

| WARD | BLAKE |

| JONES | KING |

| MARTIN | BLAKE |

| BLAKE | KING |

| CLARK | KING |

| SCOTT | JONES |

| TURNER | BLAKE |

| ADAMS | SCOTT |

| JAMES | BLAKE |

| FORD | JONES |

| MILLER | CLARK |

+--------+-------+

13 rows in set (0.00 sec)

-- 將兩張表看作一張表進(jìn)行自連接 關(guān)鍵要找到合適的關(guān)系

-- 上表King無 上級(jí)

外連接

區(qū)別:與內(nèi)鏈接 -能夠匹配記錄可以查詢出來 就是內(nèi)鏈接 且 無主輔之分

外連接:分主次 若副表 無主表數(shù)據(jù) 模擬NULL與之匹配

左連接 右連接 指的是主表的位置 可以相互替換 不忽略匹配不上的情況。

mysql> select a.ename,b.ename

-> from emp a

-> left(outer) join emp b

-> on a.mgr = b.empno;

-- or

mysql> select a.ename,b.ename

-> from emp b

-> right(outer) join emp a

-> on a.mgr = b.empno;

+--------+-------+

| ename | ename |

+--------+-------+

| SMITH | FORD |

| ALLEN | BLAKE |

| WARD | BLAKE |

| JONES | KING |

| MARTIN | BLAKE |

| BLAKE | KING |

| CLARK | KING |

| SCOTT | JONES |

| KING | NULL |

| TURNER | BLAKE |

| ADAMS | SCOTT |

| JAMES | BLAKE |

| FORD | JONES |

| MILLER | CLARK |

+--------+-------+

14 rows in set (0.00 sec)

-- 主表數(shù)據(jù) 無條件 全部查詢出來

左右連接

eg: 找出哪個(gè)部門沒有員工

mysql> select e.*[可以省略],d.*

-> from emp e

-> right join dept d

-> on e.deptno = d.deptno

-> where e.empno is NULL;

+-------+-------+------+------+----------+------+------+--

|EMPNO|ENAME|JOB|MGR| HIREDATE|SAL|COMM|DEPTNO|DEPTNO|

+-------+-------+------+------+----------+------+------+--

|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|40|OPERATIONS|

+-------+-------+------+------+----------+------+------+--

1 row in set (0.00 sec)

mysql> select d.*

-> from emp e

-> right join dept d

-> on e.deptno = d.deptno

-> where e.empno is NULL;

+--------+------------+--------+

| DEPTNO | DNAME | LOC |

+--------+------------+--------+

| 40 | OPERATIONS | BOSTON |

+--------+------------+--------+

1 row in set (0.00 sec)

三張表 的 連接 eg:找出 每一個(gè)員工的 部門名稱 和 薪資等級(jí) -- 找出 每一個(gè)員工的 部門名稱 和 薪資等級(jí)

...

-- A

-- join B

-- join C

-- A 先 和B連接 結(jié)果在和 C連接

select e.ename,d.dname,s.grade,e1.ename as authorname

from emp e

join dept d

on e.deptno = d.deptno

join salgrade s

on e.sal between s.losal and s.hisal

left join emp e1

on e.mgr = e1.empno;

+--------+------------+-------+

| ename | dname | grade |

+--------+------------+-------+

| SMITH | RESEARCH | 1 |

| ALLEN | SALES | 3 |

| WARD | SALES | 2 |

| JONES | RESEARCH | 4 |

| MARTIN | SALES | 2 |

| BLAKE | SALES | 4 |

| CLARK | ACCOUNTING | 4 |

| SCOTT | RESEARCH | 4 |

| KING | ACCOUNTING | 5 |

| TURNER | SALES | 3 |

| ADAMS | RESEARCH | 1 |

| JAMES | SALES | 1 |

| FORD | RESEARCH | 4 |

| MILLER | ACCOUNTING | 2 |

+--------+------------+-------+

-- ----------------------------------------加領(lǐng)導(dǎo)名

+--------+------------+-------+------------+

| ename | dname | grade | authorname |

+--------+------------+-------+------------+

| SMITH | RESEARCH | 1 | FORD |

| ALLEN | SALES | 3 | BLAKE |

| WARD | SALES | 2 | BLAKE |

| JONES | RESEARCH | 4 | KING |

| MARTIN | SALES | 2 | BLAKE |

| BLAKE | SALES | 4 | KING |

| CLARK | ACCOUNTING | 4 | KING |

| SCOTT | RESEARCH | 4 | JONES |

| KING | ACCOUNTING | 5 | NULL |

| TURNER | SALES | 3 | BLAKE |

| ADAMS | RESEARCH | 1 | SCOTT |

| JAMES | SALES | 1 | BLAKE |

| FORD | RESEARCH | 4 | JONES |

| MILLER | ACCOUNTING | 2 | CLARK |

+--------+------------+-------+------------+

14 rows in set (0.00 sec)

from 后 嵌套子查詢 eg:找出每個(gè)部門 的 平均薪水的 薪資等級(jí) 1. 找出每個(gè)部門的 平均薪水 (按照部門標(biāo)號(hào) 分組 求 平均薪資)

select deptno,avg(sal) from emp group by deptno;

+--------+-------------+

| deptno | avg(sal) |

+--------+-------------+

| 10 | 2916.666667 |

| 20 | 2175.000000 |

| 30 | 1566.666667 |

+--------+-------------+

mysql> select t.*,s.grade

-> from (select deptno,avg(sal) as avgsal from emp group by deptno) t

-> join salgrade s

-> on t.avgsal between s.losal and hisal;

+--------+-------------+-------+

| deptno | avgsal | grade |

+--------+-------------+-------+

| 30 | 1566.666667 | 3 |

| 10 | 2916.666667 | 4 |

| 20 | 2175.000000 | 4 |

+--------+-------------+-------+

找出每個(gè)部門 平均的薪水等級(jí) mysql> select e.deptno,avg(s.grade)

> from emp e

> join salgrade s

> on e.sal between s.losal and s.hisal

> group by e.deptno;

在 select 后 嵌套 子查詢 select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname

from emp e;

+--------+------------+

| ename | dname |

+--------+------------+

| SMITH | RESEARCH |

| ALLEN | SALES |

| WARD | SALES |

| JONES | RESEARCH |

| MARTIN | SALES |

| BLAKE | SALES |

| CLARK | ACCOUNTING |

| SCOTT | RESEARCH |

| KING | ACCOUNTING |

| TURNER | SALES |

| ADAMS | RESEARCH |

| JAMES | SALES |

| FORD | RESEARCH |

| MILLER | ACCOUNTING |

+--------+------------+

14 rows in set (0.00 sec)

union 聯(lián)合查詢

union 可以將 查詢結(jié)果集 相加 -- 找出 工作崗位是 salesman 和 manager 的員工

-- 第一種 or

mysql> select ename,job

-> from emp

-> where job = 'MANAGER' or job = 'SALESMAN';

-- 第二種 in

mysql> select ename,job

-> from emp

-> where job in('MANAGER','SALESMAN');

-- 第三種 union

mysql> select ename,job from emp where job = 'MANAGER'

-> union

-> select ename,job from emp where job = 'SALESMAN';

+--------+----------+

| ename | job |

+--------+----------+

| JONES | MANAGER |

| BLAKE | MANAGER |

| CLARK | MANAGER |

| ALLEN | SALESMAN |

| WARD | SALESMAN |

| MARTIN | SALESMAN |

| TURNER | SALESMAN |

+--------+----------+

7 rows in set (0.00 sec)

limit 限制查詢

往往用于分頁或排序查詢來限制結(jié)果的顯示方式

其中:

MySQL特有l(wèi)imit 查詢 ,Oracle 有類似機(jī)制 rownum limit 只取結(jié)果集中的 部分?jǐn)?shù)據(jù) limit 命令格式 :limit startIndex,length

ps:起始值 startIndex(從零開始,可以不寫) 長度length

limit 最后執(zhí)行

找出收入倒序排列的前5位

mysql> select ename,sal from emp order by sal desc limit 0,5;

+-------+---------+

| ename | sal |

+-------+---------+

| KING | 5000.00 |

| SCOTT | 3000.00 |

| FORD | 3000.00 |

| JONES | 2975.00 |

| BLAKE | 2850.00 |

+-------+---------+

5 rows in set (0.01 sec)

eg:找出4-9名工資排名

mysql> select ename,sal

-> from emp

-> order by sal desc

-> limit 3,6;

+--------+---------+

| ename | sal |

+--------+---------+

| JONES | 2975.00 |

| BLAKE | 2850.00 |

| CLARK | 2450.00 |

| ALLEN | 1600.00 |

| TURNER | 1500.00 |

| MILLER | 1300.00 |

+--------+---------+

6 rows in set (0.00 sec)

-- 通用 翻頁 每頁顯示 pageSize條記錄

-- 第 pageNo 頁 (PageNo - 1) *pageNo = pageSize

MySQL 常見 數(shù)據(jù)類型

與 Java 數(shù)據(jù)類型 對(duì)應(yīng)理解記憶, 分別有 int、 bigint 、long;float 、double; char、varchar(類似Java StringBuilder構(gòu)造的字符串 )、date(from java.sql.Date); BLOB二進(jìn)制大對(duì)象(存儲(chǔ)圖片、視頻 等流媒體信息) Binary Large Object;CLOB字符大對(duì)象 存儲(chǔ)較大文本 可以存儲(chǔ) 4G 字符串 Character Large Object。

eg. id(int) name(varchar) playtime(date/char) seal(BLOB) - IO流 history(CLOB)

char 與 varchar 的區(qū)別

char 效率高 不用判斷 長度, char(6) 少補(bǔ) 多錯(cuò) varchar(6) 智能分配 char 字段數(shù)據(jù)長度 是定長的 eg. 性別、生日 varchar eg.簡(jiǎn)介 姓名

DQL 語句

建表語句

-- 語法

> create table 表名(

字段名:數(shù)據(jù)類型,

字段名:數(shù)據(jù)類型,

字段名:數(shù)據(jù)類型,

字段名:數(shù)據(jù)類型,

...

);

-- 一般 數(shù)據(jù)庫 創(chuàng)建表格時(shí) 建議 以 t_/tbl_

-- t_movie 命名

eg.建立一個(gè) 擁有 “學(xué)號(hào) 姓名 性別 班級(jí)編號(hào) 生日” 的學(xué)生表格

-- 學(xué)號(hào) 姓名 性別 班級(jí)編號(hào) 生日

create table t_stu(

no bigint,

name varchar(255),

sex char(1),

classno varchar(255),

birth char(10)

);

Query OK, 0 rows affected (0.01 sec)

mysql> desc t_stu;

+---------+--------------+------+-----+-------+

| Field | Type| NULL | Key | Default | Extra |

+---------+--------------+------+-----+-------+

| no | bigint(20) | YES | | NULL | |

| name | varchar(255) | YES | | NULL| |

| sex | char(1) | YES | | NULL | |

| classno | varchar(255) | YES | | NULL| |

| birth | char(10) | YES | | NULL | |

+---------+--------------+------+-----+-------+

5 rows in set (0.00 sec)

插入數(shù)據(jù) insert

-- 語法:

insert into 表名(

字段名,

字段名,

字段名,

)

values

(

val1,

val2,

val3,

) ;

-- ps :值和字段的數(shù)量要相同 且 數(shù)據(jù)類型要對(duì)應(yīng)

插入方式,所有字段都賦值,或只給單個(gè)字段賦值。 insert into t_stu(

no,name,sex,classno,birth

)values(

1,'Zhangsan','f','gaosan1ban','1980-10-23'

);

-- 插入 一個(gè)字段 其他值 自動(dòng) 賦值NULL 且 順序可變

insert into t_student(name)values('Zhangsan');

Query OK, 1 row affected (0.01 sec)

刪表

drop table if exists t_stu;

create table t_student(

no bigint,

name varchar(255),

sex char(1) default 1,//指定默認(rèn)值

classno varchar(255),

birth char(10)

)

更新表

當(dāng) insert 執(zhí)行 一次 表中新產(chǎn)生一行 忽略NULL 且 不能再用insert 插入 只能用 update 更新 若按順序 插入 前方 字段 默認(rèn) 按 插入 順序 和 數(shù)量 執(zhí)行

ps.如果沒有條件 則 全表更新

-- 語法格式:

update 表名 set

字段1=值1,

字段2=值2,

where conditon ;

-- 更新示例

-- 插入單行數(shù)據(jù)

insert into t_student values(

10,

'Zhangsan',

'gaoshan',

);

-- 插入多行數(shù)據(jù)

insert into t_student values(

20,

'Lisi',

'gaoshan',

),(

30,

'Wangwu',

'gaoshan',

);

update dept1 set loc = 'SHANGHAI',dname = 'RENSHIBU' where deptno = 10;

mysql> update dept1 set loc = 'x',dname = 'y';

Query OK, 3 rows affected (0.00 sec)

Rows matched: 3 Changed: 3 Warnings: 0

mysql> select * from dept1;

+--------+-------+------+

| DEPTNO | DNAME | LOC |

+--------+-------+------+

| 10 | y | x |

| 20 | y | x |

| 30 | y | x |

+--------+-------+------+

4 rows in set (0.00 sec)

表的復(fù)制 create table 表名 as dql 語句;

create table emp1 as select ename,sal from emp;

-- 將 查詢結(jié)果 賦作 新表

create table emp1 as select* from emp;

-- 將 查詢結(jié)果 插入 一張表

刪除數(shù)據(jù) 不刪除表格

語法格式

-- 刪除 可以 回滾 rollback

mysql>delete from table0 where conditions

/*if no condition delete all data*/

-- 截?cái)?不可回滾

mysql> truncate table emp1;

Query OK, 0 rows affected (0.01 sec)

DDL 對(duì)表結(jié)構(gòu) 修改 可以借助工具 且 很少發(fā)生

CRUD ---> R --> create retrieve update delete

約束(Constraint)

非空約束(not NULL) 確保數(shù)據(jù) 合法、有效、完整性

唯一性約束(unique) 用戶名 方便管理 不能重復(fù)

主鍵約束(primary key) : 不能為NULL 且不能 重復(fù)(PK)

外鍵約束(foriegn key)(FK)

檢查約束(check) : Oracle 支持 check 約束 mysql 不支持該約束

非空約束 not NULL

drop table if exists t_user;

create table t_user(

id int,

username varchar(255) not NULL,

password varchar(255) not NULL,

);

insert into t_user(id,password) values(1,'123');

1364 ---> 缺 默認(rèn)值

唯一性約束 unique

唯一 約 束 修飾 的 字段具有唯一性 不能重復(fù) 但 可以為NULL

drop table if exists t_user;

create table t_user(

id int,

username varchar(255) unique -- 列級(jí)約束

);

insert into t_user values(1,'Zhangsan');

insert into t_user values(2,'Zhangsan');

同時(shí)加 unique

drop table if exists t_user;

create table t_user(

id int,

usercode varchar(255),

username varchar(255),

unique(usercode,username) -- 加一個(gè)約束 表級(jí)約束

);

insert into t_user values(1,'111','Zhangsan');

insert into t_user values(2,'111','Lisi');

insert into t_user values(3,'222','Zhangsan');

select * from t_user;

mysql> select * from t_user;

+------+----------+----------+

| id | usercode | username |

+------+----------+----------+

| 1 | 111 | Zhangsan |

| 2 | 111 | Lisi |

| 3 | 222 | Zhangsan |

+------+----------+----------+

3 rows in set (0.00 sec)

------------------分別加約束----------------------

drop table if exists t_user;

create table t_user(

id int,

usercode varchar(255) unique,

username varchar(255) unique

);

insert into t_user values(1,'111','Zhangsan');

insert into t_user values(2,'111','Lisi');

主鍵約束

drop table if exists t_user;

create table t_user(

id int primary key,

username varchar(255)

-- primary key(id)

);

寫在最后

MySQL的探索還在路上,加油?。?/p>

柚子快報(bào)邀請(qǐng)碼778899分享:MySQL筆記

http://yzkb.51969.com/

參考閱讀

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19144854.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄