數(shù)據(jù)庫(kù)相關(guān)知識(shí)復(fù)習(xí)


MYSQL 連接

UNION?

MySQL UNION 操作符用于連接兩個(gè)以上的 SELECT 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。多個(gè) SELECT 語(yǔ)句會(huì)刪除重復(fù)的數(shù)據(jù)。查詢出來(lái)是一個(gè)結(jié)果的去重復(fù)合并

SELECT expression1, expression2, ... expression_n

FROM tables[WHERE conditions]

UNION [ALL | DISTINCT]

SELECT expression1, expression2, ... expression_nFROM tables[WHERE conditions];

expression1, expression2, ... expression_n: 要檢索的列。tables:?要檢索的數(shù)據(jù)表。

WHERE conditions:?可選, 檢索條件。

DISTINCT:?可選,刪除結(jié)果集中重復(fù)的數(shù)據(jù)。

默認(rèn)情況下 UNION 操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以 DISTINCT 修飾符對(duì)結(jié)果沒(méi)啥影響。ALL:?可選,返回所有結(jié)果集,包含重復(fù)數(shù)據(jù).

SELECT country FROM Websites

UNION

SELECT country FROM appsORDER BY country;



應(yīng)用

SELECT country, name

FROM Websites

WHERE country='CN'

UNION ALL

SELECT country, app_name

FROM apps

WHERE country='CN'

ORDER BY country;


示例

JOIN

*? INNER JOIN(內(nèi)連接,或等值連接):獲取兩個(gè)表中字段匹配關(guān)系的記錄。

SELECT

?a.runoob_id, a.runoob_author, b.runoob_count?

FROM runoob_tbl a?

INNER JOIN

?tcount_tbl b?

ON a.runoob_author = b.runoob_author;

A表 INNER JOIN B表? ON A.x = B.X

INNER JOIN ON 語(yǔ)句使用兩張表相同的字段 值相等的行做鏈接 , 拼接起來(lái)兩張表的數(shù)據(jù)


內(nèi)連接

* LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒(méi)有對(duì)應(yīng)匹配的記錄。


SELECT

?a.runoob_id, a.runoob_author, b.runoob_count?

FROM?

runoob_tbl a LEFT JOIN tcount_tbl b?

ON a.runoob_author = b.runoob_author;


做鏈接


*RIGHT JOIN(右連接):與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒(méi)有對(duì)應(yīng)匹配的記錄。

SELECT?

a.runoob_id, a.runoob_author, b.runoob_count

?FROM?

runoob_tbl a RIGHT JOIN tcount_tbl b?

ON a.runoob_author = b.runoob_author;


右連接


MySQL 索引

索引分單列索引和組合索引。

單列索引,即一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引,但這不是組合索引。

組合索引,即一個(gè)索引包含多個(gè)列

創(chuàng)建索引時(shí),你需要確保該索引是應(yīng)用在 SQL 查詢語(yǔ)句的條件(一般作為 WHERE 子句的條件)。

實(shí)際上,索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄。

索引也會(huì)有它的缺點(diǎn):雖然索引大大提高了查詢速度,同時(shí)卻會(huì)降低更新表的速度,如對(duì)表進(jìn)行INSERT、UPDATE和DELETE。

因?yàn)楦卤頃r(shí),MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。

建立索引會(huì)占用磁盤空間的索引文件。

創(chuàng)建索引

基本創(chuàng)建:

CREATE INDEX indexName ON mytable(username(length));

修改表結(jié)構(gòu)(添加索引):

ALTER table tableName ADD INDEX indexName(columnName)

創(chuàng)建表的時(shí)候直接指定:

CREATE TABLE mytable(

ID INT NOT NULL,?

username VARCHAR(16) NOT NULL,?

INDEX [indexName] (username(length))?

);?

刪除索引的語(yǔ)法:

DROP INDEX [indexName] ON mytable;

唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一

創(chuàng)建索引:

CREATE UNIQUE INDEX indexname ON mytable(username(length))

顯示索引信息:

SHOW INDEX FROM table_name



Group by 語(yǔ)法

SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;

function 一般有 count(統(tǒng)計(jì)分出來(lái)的組每組多少條) sum(計(jì)算每組某一個(gè)字段的和) avg(計(jì)算每組某個(gè)字段的均值) 函數(shù)


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

DROP TABLE IF EXISTS `employee_tbl`;

CREATE TABLE `employee_tbl`

( `id` int(11) NOT NULL

, `name` char(10) NOT NULL DEFAULT ' '

, `date` datetime NOT NULL,

`singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登錄次數(shù)',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

數(shù)據(jù):

insert into employee_tbl values? ('1', '小明', '2016-04-22 15:25:33', '1'),('2', '小王', '2016-04-20 15:25:47', '3'),('3', '小麗', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'),('6', '小明', '2016-04-04 15:26:54', '2');



例子:

select name ,count(*) ,sum(id) ,AVG(id) from employee_tbl group by name ;


WITH ROLLUP??可以實(shí)現(xiàn)在分組統(tǒng)計(jì)數(shù)據(jù)基礎(chǔ)上再進(jìn)行相同的統(tǒng)計(jì)(SUM,AVG,COUNT…)

coalesce(a,b,c);??如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒(méi)意義)。

select coalesce(name,'總次數(shù)') name ,sum(singin) as singin_count from employee_tbl group by name with rollup ;


分組后的條件使用 HAVING 來(lái)限定,WHERE 是對(duì)原始數(shù)據(jù)進(jìn)行條件限制。幾個(gè)關(guān)鍵字的使用順序?yàn)?where 、group by 、having、order by ,例如:

SELECT name ,sum(singin)as 'cishu' FROM employee_tbl WHERE id<>1 GROUP BY name HAVING sum(singin)>5 ORDER BY sum(singin) DESC;




truncate ,drop,delete

truncate :刪除表全部數(shù)據(jù),保留表結(jié)構(gòu),立刻釋放磁盤空間 ,不管是 Innodb 和 MyISAM;

drop:?刪除表全部數(shù)據(jù)和表結(jié)構(gòu),立刻釋放磁盤空間,不管是 Innodb 和 MyISAM;實(shí)例,刪除學(xué)生表:

delete : delete from table_name?刪除表全部數(shù)據(jù),表結(jié)構(gòu)不變,對(duì)于 MyISAM 會(huì)立刻釋放磁盤空間,InnoDB 不會(huì)釋放磁盤空間;

delete 操作以后,使用?optimize table table_name?會(huì)立刻釋放磁盤空間,不管是 innodb 還是 myisam;


所謂SQL注入,就是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,117評(píng)論 0 44
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 8,056評(píng)論 5 115
  • 什么是數(shù)據(jù)庫(kù)? 數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫(kù)具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問(wèn),管理...
    chen_000閱讀 4,131評(píng)論 0 19
  • 特別說(shuō)明: 1、本文只是面對(duì)數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)的程序員,不適合專業(yè)DBA,DBA在數(shù)據(jù)庫(kù)性能優(yōu)化方面需要了解更多的知識(shí)...
    安易學(xué)車閱讀 2,141評(píng)論 0 40
  • 性能下降SQL慢、執(zhí)行時(shí)間長(zhǎng)、等待時(shí)間長(zhǎng) 查詢語(yǔ)句寫的爛 索引失效單值索引復(fù)合索引 關(guān)聯(lián)查詢太多join(設(shè)計(jì)缺陷...
    MPPC閱讀 1,130評(píng)論 2 9

友情鏈接更多精彩內(nèi)容