MySQL基礎(chǔ)(一)

一、分類

1、DDL(Data Definition Language):數(shù)據(jù)庫定義語言,用來定義數(shù)據(jù)庫對象:表、列、庫等。
2、DML(Data Manipulation Language):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄(數(shù)據(jù))。
3、DCL(Data Control Language):數(shù)據(jù)控制語言,用來定義訪問權(quán)限和安全級別。
4、DQL(Data Query Language):數(shù)據(jù)查詢語言,用來查詢記錄(記錄)。

二、DDL

1、基本操作:

1.1、 查看所有數(shù)據(jù)庫名稱:SHOW DATABASES;

1.2、 切換數(shù)據(jù)庫:USE mydb;,切換到mydb數(shù)據(jù)庫。

2、操作數(shù)據(jù)庫

2.1、 創(chuàng)建數(shù)據(jù)庫:CREATE DATABASE [IF NOT EXISTS] mydb;
如果寫CREATE DATABASE mydb,會創(chuàng)建一個名為mydb的數(shù)據(jù)庫,但如果這個數(shù)據(jù)庫已經(jīng)存在,則會報(bào)錯,為了避免錯誤,則在創(chuàng)建的時候加上[IF NOT EXISTS],在不存在的時候創(chuàng)建該庫。

2.2、 刪除數(shù)據(jù)庫:DROP DATABASE [IF EXISTS] mydb;IF EXISTS代表如果存在,意為如果數(shù)據(jù)庫存在,則刪除該數(shù)據(jù)庫,如果不寫IF EXISTS,在數(shù)據(jù)庫不存在的是偶刪除,會報(bào)錯。

2.3、修改數(shù)據(jù)庫編碼:ALTER DATABASE mydb CHARACTER SET UTF8;修改數(shù)據(jù)庫mydb的編碼為utf-8,注意:在MySQL中所有的utf-8編碼都不能使用中間的“-”。

3、數(shù)據(jù)類型

MYSQL與Java一樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應(yīng)用在列上。

常用類型:
int:整型
double:浮點(diǎn)型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99;
decimal:浮點(diǎn)型,在表單錢方面使用該類型,因?yàn)椴粫霈F(xiàn)精度缺失問題;
char:固定長度字符串類型;
varchar:可變長度字符串類型;
text:字符串類型;
blob:字節(jié)類型;
date:日期類型,格式為yyyy-MM-dd;
time:時間類型,格式為hh:mm:ss;
timestamp:時間戳類型;

4、操作表

4.1、操作表
(1)、創(chuàng)建表:
CREATE TABLE 表名(
列名 列類型,
列名 列類型
........
);
(2)、查看當(dāng)前數(shù)據(jù)庫中所有表名稱:SHOW TABLES;
(3)、查看指定表的創(chuàng)建語句:SHOW CREATE TABLE emp,查看emp表的創(chuàng)建語句;
(4)、查看表結(jié)構(gòu):DESC emp; 查看emp表結(jié)構(gòu);
(5)、刪除表:DROP TABLE emp,刪除emp表;
(6)、修改表:
修改之添加列:給stu表添加classname列:alter table stu add(classname varchar(100));
修改之修改列類型:修改stu表的gender列類型為CHAR(2):ALTER TABLE stu MODIFY gender CHAR(2);
修改之修改列名:修改stu表的gender為sex:ALTER TABLE stu change gender sex CHAR(2);
修改之刪除列:刪除stu表的classname列:ALTER TABLE stu DROP classname;
修改之修改表名稱:修改stu表名稱為student:ALTER TABLE stu RENAME TO student;

三、DML

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

INSERT INTO 表名(列名1,列名2,....)VALUES(值1,值2);

INSERT INTO 表名 VALUES(值1,值2);這個語句因?yàn)闆]有指定要插入的列,所以插入數(shù)據(jù)的時候要按建表時的順序插入;

2、修改數(shù)據(jù)

update 表名 set 列名1=值1,.....,列名n=值n WHERE 條件;

3、刪除數(shù)據(jù)

delete FROM 表名 WHERE 條件;

TRUNCATE TABLE 表名;雖然TRUNCATE和DELETE都可以刪除表的所有記錄,但原理不同。DELETE的效率沒有TRUNCATE高; TRUNCATE其實(shí)屬于DDL語句,它是先DROP TABLE,在CREATE TABLE。而且TRUNCATE刪除的記錄是無法回滾的,DELETE刪除的記錄可以回滾。

四、DQL

DQL就是數(shù)據(jù)查詢語言,數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集到客戶端。
語法:
SELECT selection_list 要查詢的列名稱
FROM table_list 要查詢的表名稱
WHERE condition 分組后的行條件
GROUP BY grouping_columns 對結(jié)果分組
HAVING condition 分組后的行條件
ORDER BY sorting_columns 對結(jié)果分組
LIMIT offset_start,row_count 對結(jié)果限定

1、基礎(chǔ)查詢

1.1、查詢stu表的所有列: SELECT *FROM stu;
1.2、查詢stu表的指定列(sid,sname,age):SELECT sid,sname,age FROM stu;

2、條件查詢

2.1、條件查詢介紹
條件查詢就是在查詢時給出WHERE子句,在WHERE子句中可以使用如下運(yùn)算符及關(guān)鍵字:=、!=、<>、<、<=、>、>=;
BETWEEN...AND; IN(set);IS NULL; AND; OR; NOT
2.2、查詢gender為女,并且年齡為50的記錄
SELECT *FROM stu WHERE gender=‘fename’ OR sname age=50;
2.3、查詢學(xué)號不是S_1001,S_1002,S_1003的及學(xué)生記錄
SELECT *FROM stu WHERE sid IN(‘S_1001’,‘S_1002’,‘S_1003’);
2.4、查詢年齡為null的記錄
SELECT *FROM stu WHERE age IS NULL;

3、模糊查詢

當(dāng)想查詢姓名中包含a字母的學(xué)生時就需要使用模糊查詢,模糊查詢關(guān)鍵字LIKE。
查詢姓名中第二個字母為a的學(xué)生記錄:SELETE *FROM stu WHERE sname LIKE '_i%';
一個橫線代表以為,”%“代表后面位數(shù)不限。

4、字段控制查詢

4.1、去除重復(fù)記錄,如果兩行或兩行以上的數(shù)據(jù)完全相同,就需要去除重復(fù)記錄,關(guān)鍵字DISTINCT。
SELECT DISTINCT sal FROM emp;
4.2、查看雇員的月薪sal與傭金comm之和:因?yàn)槎x的時候把它們定義成立數(shù)值類型,所以可以直接做加運(yùn)算,如果sal或comm中有一個字段不是數(shù)據(jù)類型,就會出錯
SELECT *,sal + comm FROM emp;
因?yàn)橛锌赡艹霈F(xiàn)sal或comm為null的情況,任何東西與null相加結(jié)果還是null,這時就需要將記錄是null的之轉(zhuǎn)換一下,使用 IFNULL(轉(zhuǎn)換前的列名,需要替換null的數(shù)值),例SELECT *,sal + IFNULL(comm,0) FROM emp;
4.3、給列名添加別名:按上文4.2所寫,搜索出來的的月薪與傭金之和的列名為:
sal + IFNULL(comm,0),看起來很別扭,這時可以給它起一個別名(如total):
SELECT *,sal + IFNULL(comm,0)AS total FROM emp;同時AS可省略(起別名的時候):SELECT *,sal + IFNULL(comm,0)total FROM emp;

5、排序

5.1、查詢stu表的所有記錄,按年齡sage升序排序
SELECT *
FROM
ORDER BY sage ASC;
或者:
SELECT *
FROM
ORDER BY sage ;
ASC代表升序,默認(rèn)為升序

5.2、查詢stu表的所有記錄,按年齡sage降序排序
SELECT *
FROM
ORDER BY sage DESC;
DESC代表降序

6、聚合函數(shù)

聚合函數(shù)是用來做縱向運(yùn)算的函數(shù):有COUNT()、MAX()、MIN()、SUM()、AVG();
6.1、COUNT:統(tǒng)計(jì)指定列不為null的記錄行數(shù)
例1:查詢emp表中的記錄數(shù):
SELECT COUNT(*)FROM emp;
例2:查詢emp表中有傭金(comm)的人數(shù):
SELECT COUNT(comm)FROM emp;
注意:例1是統(tǒng)計(jì)所有非空行的記錄的總數(shù),例二中因?yàn)橹付耸莄omm列,所以只統(tǒng)計(jì)comm列非NULL的行數(shù)
6.2、SUM和AVG
sum是計(jì)算指定列的數(shù)值和,如果指定列的類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;
avg是計(jì)算指定列的平均值,如果指定列的類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;
兩者都是縱向的
例1:查詢emp表所有員工月薪(sal)和及平均傭金(comm)
SELECT SUM(sal),AVG(comm)FROM emp;

7、分組查詢

使用分組查詢時需要使用BROUP BY子句,以GROUP BY后面的列來進(jìn)行分組
7.1、例:查詢每個部門的部門編號(deptno)以及每個部門工資(sal)大于1500的人數(shù)
SELECT deptno,COUNT(*)
FROM emp
WHERE sal>1500
GROUP BY deptno;
7.2、HAVING子句
例:查詢工資(sal)總和大于9000的部門編號以及工資和:
SELECT deptno,SUN(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal)>9000;
注意:WHERE是對分組前記錄的條件查詢,如果這行記錄沒有滿足WHERE子句的條件,這行記錄就不會參加分組,而HAVING是對分組后數(shù)據(jù)的約束,本例首先對部門進(jìn)行分組,再找出工資和大于9000的部門,所以用HAVING

8、LIMIT

LIMIT用來限定查詢結(jié)果的起始行,以及總行數(shù)
例:從emp表中查詢5行記錄,起始行為0
SELECT *FROM emp LIMIT 0,5;

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

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

  • 1.簡介 數(shù)據(jù)存儲有哪些方式?電子表格,紙質(zhì)文件,數(shù)據(jù)庫。 那么究竟什么是關(guān)系型數(shù)據(jù)庫? 目前對數(shù)據(jù)庫的分類主要是...
    喬震閱讀 2,004評論 0 2
  • 數(shù)據(jù)庫概述: 數(shù)據(jù)庫(DataBase,DB):指長期保存在計(jì)算機(jī)的存儲設(shè)備上,按照一定規(guī)則組織起來,可以被各種用...
    字節(jié)碼閱讀 642評論 0 0
  • DQL數(shù)據(jù)查詢語言 數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集給客戶端。 查詢返回的結(jié)果集是一...
    Michael_林閱讀 986評論 0 1
  • SQL ==SQLPLUS== DML(Data Manipulation Language,數(shù)據(jù)操作語言)---...
    蝌蚪1573閱讀 636評論 0 4
  • 大學(xué)畢業(yè)兩年半了。 兩年半后似乎我的一切都沒變,似乎又變得面目全非。我或許還是我,也或許已經(jīng)是另一個全新的人了。 ...
    喬祎閱讀 99評論 0 0

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