MySQL-CRUD

SQL語句分類

  • DQL(數(shù)據(jù)查詢語言): 查詢語句骄噪,凡是select語句都是DQL链蕊。
  • DML(數(shù)據(jù)操作語言):insert delete update滔韵,對表當中的數(shù)據(jù)進行增刪改。
  • DDL(數(shù)據(jù)定義語言):create drop alter邦马,對表結(jié)構(gòu)的增刪改滋将。
  • TCL(事務(wù)控制語言):commit提交事務(wù)症昏,rollback回滾事務(wù)齿兔。(TCL中的T是Transaction)
  • DCL(數(shù)據(jù)控制語言): grant授權(quán)、revoke撤銷權(quán)限等添诉。

Select語句

查看表結(jié)構(gòu)

desc + table_name


    mysql> desc dept;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | DEPTNO | int(2)      | NO   | PRI | NULL    |       |     部門編號
    | DNAME  | varchar(14) | YES  |     | NULL    |       |     部門名稱
    | LOC    | varchar(13) | YES  |     | NULL    |       |     部門位置
    +--------+-------------+------+-----+---------+-------+

簡單查看表中數(shù)據(jù)

簡答查詢

語法格式:
select 字段名1,字段名2,字段名3,.... from 表名;

提示:
1、任何一條sql語句以“;”結(jié)尾蘑斧。
2竖瘾、sql語句不區(qū)分大小寫捕传。

給查詢結(jié)果的列重命名

as關(guān)鍵字庸论,as 關(guān)鍵字可以省略

select ename,sal * 12 as yearsal from emp;

查詢所有字段

select * from table_name;

實際開發(fā)中不建議使用*棒呛,效率較低簇秒。

mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+

條件查詢

語法格式:
select
字段,字段...
from
表名
where
條件;

執(zhí)行順序:先from扛禽,然后where拆内,最后select

模糊查詢

模糊查詢使用關(guān)鍵字like
在模糊查詢當中麸恍,必須掌握兩個特殊的符號抹沪,一個是%瓤球,一個是_
%代表任意多個字符卦羡,_代表任意1個字符。

示例

找出名字當中含有O的瓶颠?
(在模糊查詢當中刺桃,必須掌握兩個特殊的符號瑟慈,一個是%,一個是_)
%代表任意多個字符借杰,_代表任意1個字符第步。
select ename from emp where ename like '%O%';
+-------+
| ename |
+-------+
| JONES |
| SCOTT |
| FORD  |
+-------+
找出名字中第二個字母是A的缘琅?
select ename from emp where ename like '_A%';
+--------+
| ename  |
+--------+
| WARD   |
| MARTIN |
| JAMES  |
+--------+
找出名字中有下劃線的刷袍?
mysql> select * from t_user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | WANG_WU  |
+------+----------+
select name from t_user where name like '%_%';
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
| WANG_WU  |
+----------+
select name from t_user where name like '%\_%';
+---------+
| name    |
+---------+
| WANG_WU |
+---------+

找出名字中最后一個字母是T的呻纹?
select ename from emp where ename like '%T';
+-------+
| ename |
+-------+
| SCOTT | 
+-------+

結(jié)果集去重

distinct關(guān)鍵字

mysql> select distinct job from emp; // distinct關(guān)鍵字去除重復(fù)記錄淑仆。
+-----------+
| job       |
+-----------+
| CLERK     |
| SALESMAN  |
| MANAGER   |
| ANALYST   |
| PRESIDENT |
+-----------+   

mysql> select ename,distinct job from emp;
以上的sql語句是錯誤的哥力。
記追园稀:distinct只能出現(xiàn)在所有字段的最前面桥温。

排序

關(guān)鍵字order by

MySQL中默認是升序梁丘。asc表示升序旺韭,desc表示降序

語法格式

select 
    ...
from 
    表名 
order by
    ...

執(zhí)行順序

select 
        字段                      3
    from
        表名                      1
    where
        條件                      2
    order by
        ....                        4
    
    order by是最后執(zhí)行的。

查看當前 數(shù)據(jù)庫與版本號

mysql> select database(); 查看當前使用的是哪個數(shù)據(jù)庫
+-------------+
| database()  |
+-------------+
| swu         |
+-------------+

mysql> select version(); 查看mysql的版本號珊燎。
+-----------+
| version() |
+-----------+
| 8.0.28    |
+-----------+

分組函數(shù)

分組函數(shù)又稱多行處理函數(shù),輸入多行遵湖,最終輸出的結(jié)果是1行

  • count 計數(shù)
  • sum 求和
  • avg 平均值
  • max 最大值
  • min 最小值

所有的分組函數(shù)都是對“某一組”數(shù)據(jù)進行操作

注意

分組函數(shù)自動忽略NULL

where中不能直接使用

select ename,sal from emp where sal > avg(sal);
//ERROR 1111 (HY000): Invalid use of group function

思考以上的錯誤信息:無效的使用了分組函數(shù)悔政?
原因:SQL語句當中有一個語法規(guī)則,分組函數(shù)不可直接使用在where子句當中

我們用序號來表示執(zhí)行的先后順序

因為group by是在where執(zhí)行之后才會執(zhí)行的
                
select      5
        ..          
from        1
        ..
where       2
        ..
group by    3
        ..
having      4
                    ..
order by    6
        ..

count(*)和count(字段)的區(qū)別

count(*):不是統(tǒng)計某個字段中數(shù)據(jù)的個數(shù)延旧,而是統(tǒng)計總記錄條數(shù)谋国。(和某個字段無關(guān))
count(comm): 表示統(tǒng)計comm字段中不為NULL的數(shù)據(jù)總數(shù)量

group by and having

group by : 按照某個字段或者某些字段進行分組。
having : having是對分組之后的數(shù)據(jù)進行再次過濾

案例:找出每個工作崗位的最高薪資

select max(sal),job from emp group by job;
    +----------+-----------+
    | max(sal) | job       |
    +----------+-----------+
    |  3000.00 | ANALYST   |
    |  1300.00 | CLERK     |
    |  2975.00 | MANAGER   |
    |  5000.00 | PRESIDENT |
    |  1600.00 | SALESMAN  |
    +----------+-----------+

注意:

  • 分組函數(shù)一般都會和group by聯(lián)合使用迁沫,這也是為什么它被稱為分組函數(shù)的原因芦瘾。
  • 并且任何一個分組函數(shù)(count sum avg max min)都是在group by語句執(zhí)行結(jié)束之后才會執(zhí)行的。
  • 當一條sql語句沒有g(shù)roup by的話集畅,整張表的數(shù)據(jù)會自成一組近弟。
select ename,max(sal),job from emp group by job;
以上在mysql當中祷愉,查詢結(jié)果是有的,但是結(jié)果沒有意義,在Oracle數(shù)據(jù)庫當中會報錯欺殿。語法錯誤擂啥。

Oracle的語法規(guī)則比MySQL語法規(guī)則嚴謹蜒谤。
記住一個規(guī)則:當一條語句中有g(shù)roup by的話,select后面只能跟分組函數(shù)和參與分組的字段

完整DQL語句寫法

數(shù)字代表執(zhí)行順序

select          5
        ..
from            1   
        ..
where           2
        ..
group by        3
        ..
having          4
        ..
order by        6
        ..


insert語句

語法格式:

insert into 表名(字段名1,字段名2,字段名3,....) values(值1,值2,值3,....)

要求:字段的數(shù)量和值的數(shù)量相同,并且數(shù)據(jù)類型要對應(yīng)相同

注意:

  • 當一條insert語句執(zhí)行成功之后,表格當中必然會多一行記錄。
  • 即使多的這一行記錄當中某些字段是NULL挥唠,后期也沒有辦法在執(zhí)行
  • insert語句插入數(shù)據(jù)了号坡,只能使用update進行更新。

一次插入多行數(shù)據(jù)

insert into t_student(no,name,sex,classno,birth) values
(3,'rose','1','1101','1952-12-14'),
(4,'jack','1','1201','1955-12-14');

查詢結(jié)果插入表

mysql> insert into dept1 select * from dept;
mysql> select * from dept1;
    +--------+------------+----------+
    | DEPTNO | DNAME      | LOC      |
    +--------+------------+----------+
    |     10 | ACCOUNTING | NEW YORK |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    |     10 | ACCOUNTING | NEW YORK |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    +--------+------------+----------+

表的復(fù)制

語法:
create table 表名 as select語句;
將查詢結(jié)果當做表創(chuàng)建出來

update語句

語法格式:

update 表名 set 字段名1=值1,字段名2=值2... where 條件;

案例

將部門10的LOC修改為SHANGHAI籽慢,將部門名稱修改為RENSHIBU
    update dept1 set loc = 'SHANGHAI', dname = 'RENSHIBU' where deptno = 10;
    mysql> select * from dept1;
    +--------+------------+----------+
    | DEPTNO | DNAME      | LOC      |
    +--------+------------+----------+
    |     10 | RENSHIBU   | SHANGHAI |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    |     10 | RENSHIBU   | SHANGHAI |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    +--------+------------+----------+

    更新所有記錄
        update dept1 set loc = 'x', dname = 'y';
        mysql> select * from dept1;
        +--------+-------+------+
        | DEPTNO | DNAME | LOC  |
        +--------+-------+------+
        |     10 | y     | x    |
        |     20 | y     | x    |
        |     30 | y     | x    |
        |     40 | y     | x    |
        |     10 | y     | x    |
        |     20 | y     | x    |
        |     30 | y     | x    |
        |     40 | y     | x    |
        +--------+-------+------+

delete語句

語法格式:

delete from 表名 where 條件;

注意:沒有where設(shè)置條件髓帽,表中的數(shù)據(jù)將會被全部刪除

如何快速刪除大數(shù)據(jù)量的表

在實際開發(fā)過程中衡查,一張表可能有成千上萬條記錄,此時執(zhí)行delete語句往往需要十多分鐘,我們可以直接使用truncate截斷表數(shù)據(jù),速度在瞬間完成装盯。

truncate table 表名

警告

表被截斷账磺,不可回滾碧聪,數(shù)據(jù)永久丟失


關(guān)于刪庫跑路的一點看法

新聞

首先我們來看兩條新聞

  1. 百度 95 后程序員刪庫跑路被判刑,動機是工作變動及對領(lǐng)導(dǎo)不滿 (baidu.com)
  2. 程序員離職當天“刪庫跑路”,后果很嚴重挺狰,法院判了 (baidu.com)

觀點

個人認為刪庫跑路的程序員不負責任趁耗,沒有擔當意識径簿,“刪庫跑路”這種行為類似與小孩子發(fā)脾氣缠捌,并且違反了相關(guān)法律法規(guī)哑芹,對自己和公司都造成了嚴重傷害乙嘀,可以說是殺敵一千,自損一萬嘉冒。

賠錢事小,蹲監(jiān)獄事大。

更何況還是刪除數(shù)據(jù)庫,給公司帶來極大損失榄鉴,相信以后沒有公司還敢再聘用這類程序員矛辕。

一時的沖動導(dǎo)致編程生涯的結(jié)束,可惜。

我們還是要遵守法律法規(guī)纠屋,心有不滿岩四,可以多和領(lǐng)導(dǎo)多交流桶唐,多溝通醉蚁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市如贷,隨后出現(xiàn)的幾起案子凿掂,更是在濱河造成了極大的恐慌,老刑警劉巖萝究,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡愁铺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淮腾,你說我怎么就攤上這事体箕。” “怎么了翔试?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钧舌。 經(jīng)常有香客問我叔营,道長,這世上最難降的妖魔是什么斟冕? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮泛范,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘患整。我一直安慰自己憔四,他們只是感情好埠对,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布项玛。 她就那樣靜靜地躺著剥哑,像睡著了一般株婴。 火紅的嫁衣襯著肌膚如雪座哩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天啥么,我揣著相機與錄音驰坊,去河邊找鬼。 笑死拳芙,一個胖子當著我的面吹牛察藐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舟扎,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼分飞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了睹限?” 一聲冷哼從身側(cè)響起譬猫,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羡疗,沒想到半個月后染服,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡叨恨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年柳刮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡诚亚,死狀恐怖晕换,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情站宗,我是刑警寧澤闸准,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站梢灭,受9級特大地震影響夷家,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敏释,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一库快、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钥顽,春花似錦栏豺、人聲如沸徙歼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奶浦,卻和暖如春兄墅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澳叉。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工隙咸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人成洗。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓五督,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泌枪。 傳聞我的和親對象是個殘疾皇子概荷,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

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