SQL語言基礎

什么是SQL

SQL是Structured Quevy Language(結(jié)構(gòu)化查詢語言)的縮寫。 ? SQL是專為數(shù)據(jù)庫而建立的操作命令集栋猖,是一種功能齊全的數(shù)據(jù)庫語言昆婿。 ? 在使用它時,只需要發(fā)出“做什么”的命令肾砂,“怎么做”是不用使用者考慮的远剩。


sql功能分類

DDL:數(shù)據(jù)定義語言(結(jié)構(gòu))Definition ? 用來定義數(shù)據(jù)庫對象:創(chuàng)建庫扣溺,表,列等瓜晤。

DML:數(shù)據(jù)操作語言(Manipulation) ? 用來操作數(shù)據(jù)庫表中的記錄

DQL:數(shù)據(jù)查詢語言(Querry) ? 用來查詢數(shù)據(jù)

DCL:數(shù)據(jù)控制語言(control) ? 用來定義訪問權(quán)限和安全級別


SQL數(shù)據(jù)類型

char 類型 char(10)"abc " ,七個是空格

int(11) 括號里面是補多少個零

MySQL中定義數(shù)據(jù)字段的類型對你數(shù)據(jù)庫的優(yōu)化是非常重要的锥余。

MySQL支持所有標準SQL數(shù)值數(shù)據(jù)類型。

MySQL支持多種類型痢掠,大致可以分為三類 ? 數(shù)值類型

image

字符串類型

image

日期和時間類型

image

常用數(shù)據(jù)類型

double:浮點型驱犹,例如double(5,2)表示最多5位,其中必須有2位小數(shù)足画,即最大值為999.99雄驹;

char:固定長度字符串類型; char(10) 'abc '

varchar:可變長度字符串類型淹辞;varchar(10) 'abc'

text:字符串類型;

blob:二進制類型医舆;

date:日期類型,格式為:yyyy-MM-dd象缀;

time:時間類型蔬将,格式為:hh:mm:ss

datetime:日期時間類型 yyyy-MM-dd hh:mm:ss

在mysql中,字符串類型和日期類型都要用單引號括起來央星。'Myxq' '2020-01-01'


DDL

創(chuàng)建數(shù)據(jù)庫

create database 數(shù)據(jù)庫名 character set utf8;

修改數(shù)據(jù)庫

alter database 數(shù)據(jù)庫名 charactor set gbk;

創(chuàng)建學生表

image

image

?

添加一列

ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型;

查看表的字段信息

DESC 表名;

修改一個表的字段類型

ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型;

刪除一列

ALTER TABLE 表名 DROP 字段名;

修改表名

RENAME TABLE 原始表名 TO 要修改的表名;

查看表的創(chuàng)建細節(jié)

SHOW CREATE TABLE 表名;

修改表的字符集為gbk

ALTER TABLE 表名 CHARACTER SET 字符集名稱;

修改表的列名

ALTER TABLE 表名 CHANGE 原始列名 新列名 數(shù)據(jù)類型;

刪除表

DROP TABLE 表名;


DML

查詢表中的所有數(shù)據(jù)

SELECT * FROM 表名;

DML是對表中的數(shù)據(jù)進行增霞怀、刪、改的操作

插入操作

INSERT INTO 表名(列名1莉给,列名2 ...)VALUE (列值1毙石,列值2...);

注意事項 ? 列名與列值的類型、個數(shù)禁谦、順序要一一對應胁黑。 ? 值不要超出列定義的長度傅联。 ? 插入的日期和字符一樣薄风,都使用引號括起來咏闪。

批量插入 ? INSERT INTO 表名(列名1樊零,列名2 ...)VALUES (列值1赞别,列值2...)捅僵,(列值1慷妙,列值2...);

更新操作

UPDATE 表名 SET 列名1=列值1眷昆,列名2=列值2 演训。弟孟。。 WHERE 列名=值

把所有學生的分數(shù)改為90 ? update students set score=90

把姓名為zs的學生分數(shù)改為60 ? update student set score=60 where name='zs';

把姓名為李四的年齡改為20和分數(shù)改為70 ? update student set age=20,score=70 where name='ls';

把wc的年齡在原來基礎上加1歲 ? update students set age=age+1 where name='wc';

修改數(shù)據(jù)庫密碼 ? use mysql; ? update user set password=password('abc') WHERE User='root'; ? update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost'; ? flush privileges;刷新MySQL的系統(tǒng)權(quán)限相關(guān)表重要

mysqladmin -u root -p password 123456

刪除操作

DELETE FROM 表名 【W(wǎng)HERE 列名=值】 ? TRUNCATE TABLE 表名;

DELETED 與TRUNCATE的區(qū)別 ? DELETE 刪除表中的數(shù)據(jù)样悟,表結(jié)構(gòu)還在;刪除后的數(shù)據(jù)可以找回 ? TRUNCATE 刪除是把表直接DROP掉拂募,然后再創(chuàng)建一個同樣的新表庭猩。 ? 刪除的數(shù)據(jù)不能找回。執(zhí)行速度比DELETE快陈症。


DQL

查詢所有列

SELECT * FROM 表名;

結(jié)果集

數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進行改變蔼水,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集給客戶端。

結(jié)果集 ? 通過查詢語句查詢出來的數(shù)據(jù)以表的形式展示我們稱這個表為虛擬結(jié)果集录肯。存放在內(nèi)存中趴腋。 ? 查詢返回的結(jié)果集是一張?zhí)摂M表。

查詢指定列的數(shù)據(jù)

SELECT 列名1论咏,列表2... FROM 表名;

條件查詢

條件查詢就是在查詢時給出WHERE子句优炬,在WHERE子句中可以使用一些運算符及關(guān)鍵字:

條件查詢運行符及關(guān)鍵字 ? =(等于)、!=(不等于)厅贪、<>(不等于)蠢护、<(小于)、<=(小于等于)养涮、>(大于)糊余、>=(大于等于); ? BETWEEN…AND单寂;值在什么范圍 ? IN(set)贬芥;固定的范圍值 ? IS NULL;(為空) IS NOT NULL(不為空) ? AND宣决;與 ? OR蘸劈;或 ? NOT; 非

使用

查詢性別為男尊沸,并且年齡為20的學生記錄 ? SELECT * FROM students WHERE gender='男' AND age=20;

查詢學號為1001 或者 名為zs的記錄** ? SELECT * FROM students WHERE id ='1001' OR name='zs';

查詢學號為1001威沫,1002,1003的記錄 ? SELECT * FROM students WHERE id='1001' OR id='1002' OR 1001='1003'; ? SELECT * FROM students WHERE id IN('1001','1002','1003'); ? SELECT * FROM students WHERE id NOT IN ('1001','1002','1003');

查詢年齡為null的記錄 ? SELECT * FROM students WHERE age IS NULL;

查詢年齡在18到20之間的學生記錄 ? SELECT * FROM students WHERE age>=18 AND age<=20; ? SELECT * FROM students WHERE age BETWEEN 18 AND 20;

查詢性別非男的學生記錄 ? SELECT * FROM students WHERE gender !='男';

查詢姓名不為null的學生記錄 ? SELECT * FROM students WHERE name IS NOT NULL;

模糊查詢

根據(jù)指定的關(guān)鍵進行查詢

使用LIKE關(guān)鍵字后跟通配符

通配符

_ :任意一個字符 ? %:任意0~n個字符

使用

查詢姓名由5個字母構(gòu)成的學生記錄 ? SELECT * FROM students WHERE name LIKE '_';

模糊查詢必須使用LIKE關(guān)鍵字洼专。其中 “”匹配任意一個字母棒掠,5個“”表示5個任意字母。**

查詢姓名由5個字母構(gòu)成屁商,并且第5個字母為“s”的學生記錄 ? SELECT * FROM students WHERE name LIKE 's';

查詢姓名以“m”開頭的學生記錄 ? SELECT * FROM students WHERE name LIKE 'm%';

其中“%”匹配0~n個任何字母烟很。

查詢姓名中第2個字母為“u”的學生記錄 ? SELECT * FROM students WHERE name LIKE '_u%';

查詢姓名中包含“s”字母的學生記錄 ? SELECT * FROM stu WHERE name LIKE '%s%';

字段控制查詢

去除重復記錄

SELECT DISTINCT name FROM students;

把查詢字段的結(jié)果進行運算,必須都要是數(shù)據(jù)型

SELECT *,字段1+字段2 FROM 表名; ? 列有很多記錄的值為NULL蜡镶, ? 因為任何東西與NULL相加結(jié)果還是NULL雾袱,所以結(jié)算結(jié)果可能會出現(xiàn)NULL。

下面使用了把NULL轉(zhuǎn)換成數(shù)值0的函數(shù)IFNULL: ? SELECT *,age+IFNULL(score,0) FROM students;

對查詢結(jié)果起別名 ? 在上面查詢中出現(xiàn)列名為sx+IFNULL(yw,0)官还,這很不美觀芹橡,現(xiàn)在我們給這一列給出一個別名,為total: ? SELECT *, yw+IFNULL(sx,0) AS total FROM score; ? 省略 AS SELECT *, yw+IFNULL(sx,0) total FROM score;

排序

創(chuàng)建表

CREATE TABLE employee ( id int(11) NOT NULL, name varchar(50) DEFAULT NULL, gender varchar(1) DEFAULT NULL,hire_date date DEFAULT NULL,salary decimal(10,0) DEFAULT NULL,performance double(255,0) DEFAULT NULL,manage double(255,0) DEFAULT NULL, department varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO employee VALUES (1001, '張三', '男', '1991-7-25', 2000, 200, 500, '營銷部'); INSERT INTO employee VALUES (1002, '李四', '男', '2017-7-5', 4000, 500, NULL, '營銷部'); INSERT INTO employee VALUES (1003, '王五', '女', '2018-5-1', 6000, 100, 5000, '研發(fā)部'); INSERT INTO employee VALUES (1004, '趙六', '男', '1991-6-1', 1000, 3000, 4000, '財務部'); INSERT INTO employee VALUES (1005, '孫七', '女', '2018-3-23', 8000, 1000, NULL, '研發(fā)部'); INSERT INTO employee VALUES (1006, '周八', '男', '2010-9-8', 5000, 500, 1000, '人事部'); INSERT INTO employee VALUES (1007, '吳九', '女', '2017-7-5', 8000, 601, NULL, '研發(fā)部'); INSERT INTO employee VALUES (1008, '鄭十', '女', '2014-4-6', 4000, 1801, NULL, '人事部');

對查詢的結(jié)果進行排序

使用關(guān)鍵字ORDER BY

排序類型

升序ASC ? 從小到大 默認

降序DESC ? 從大到小

使用

對所有員工的薪水進行排序 ? SELECT *FROM employee ORDER BY age ASC;

查詢所有學生記錄望伦,按年齡降序排序 ? SELECT * FROM employee ORDER BY age DESC;

查詢所有雇員林说,按月薪降序排序煎殷,如果月薪相同時,按編號升序排序 ? SELECT * FROM employee ORDER BY salary DESC, id ASC;

聚合函數(shù)

對查詢的結(jié)果進行統(tǒng)計計算

常用聚合函數(shù)

COUNT():統(tǒng)計指定列不為NULL的記錄行數(shù)腿箩; ? MAX():計算指定列的最大值蝌数,如果指定列是字符串類型,那么使用字符串排序運算度秘; ? MIN():計算指定列的最小值,如果指定列是字符串類型饵撑,那么使用字符串排序運算剑梳; ? SUM():計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型滑潘,那么計算結(jié)果為0垢乙; ? AVG():計算指定列的平均值,如果指定列類型不是數(shù)值類型语卤,那么計算結(jié)果為0追逮;

使用

COUNT ? 查詢employee表中記錄數(shù): ? SELECT COUNT() AS total_record FROM employee;

查詢員工表中有績效的人數(shù) ? SELECT COUNT(performance) FROM employee;

查詢員工表中月薪大于2500的人數(shù): ? SELECT COUNT() FROM employee WHERE salary > 2500;

統(tǒng)計月薪與績效之和大于5000元的人數(shù): ? SELECT COUNT(*) FROM employee WHERE salary+IFNULL(performance,0) > 5000;

查詢有績效的人數(shù),和有管理費的人數(shù): ? SELECT COUNT(performance), COUNT(manage) FROM employee;

SUM和AVG ? 查詢所有雇員月薪和: ? SELECT SUM(salary) FROM employee;

查詢所有雇員月薪和粹舵,以及所有雇員績效和 ? SELECT SUM(salary), SUM(performance) FROM employee;

查詢所有雇員月薪+績效和: ? SELECT SUM(salary+IFNULL(performance,0)) FROM employee;

統(tǒng)計所有員工平均工資: ? SELECT AVG(salary) FROM employee;

MAX和MIN ? 查詢最高工資和最低工資: ? SELECT MAX(salary), MIN(salary) FROM employee;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钮孵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眼滤,更是在濱河造成了極大的恐慌巴席,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诅需,死亡現(xiàn)場離奇詭異漾唉,居然都是意外死亡,警方通過查閱死者的電腦和手機堰塌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門赵刑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人场刑,你說我怎么就攤上這事般此。” “怎么了牵现?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵恤煞,是天一觀的道長。 經(jīng)常有香客問我施籍,道長居扒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任丑慎,我火速辦了婚禮喜喂,結(jié)果婚禮上瓤摧,老公的妹妹穿的比我還像新娘。我一直安慰自己玉吁,他們只是感情好照弥,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著进副,像睡著了一般这揣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上影斑,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天给赞,我揣著相機與錄音,去河邊找鬼矫户。 笑死片迅,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的皆辽。 我是一名探鬼主播柑蛇,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驱闷!你這毒婦竟也來了耻台?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤空另,失蹤者是張志新(化名)和其女友劉穎粘我,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痹换,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡征字,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娇豫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匙姜。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冯痢,靈堂內(nèi)的尸體忽然破棺而出氮昧,到底是詐尸還是另有隱情,我是刑警寧澤浦楣,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布袖肥,位于F島的核電站,受9級特大地震影響振劳,放射性物質(zhì)發(fā)生泄漏椎组。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一历恐、第九天 我趴在偏房一處隱蔽的房頂上張望寸癌。 院中可真熱鬧专筷,春花似錦、人聲如沸蒸苇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溪烤。三九已至味咳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間檬嘀,已是汗流浹背槽驶。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枪眉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓再层,卻偏偏與公主長得像贸铜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聂受,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容