MySQL常用命令及案例

1.創建數據庫:create database 數據庫名 [character set 字符集][collate 校對規則]; (中括號里面的內容不是必須的)
(1).create database day08_3 character set gbk collate gbk_chinese_ci;
(2).alter database day08_2 character set utf-8; (修改day08_2的字符集為utf-8)

2.設置數據庫編碼:create database 數據庫名 character set 字符集;

3.查看數據庫MySQL服務器中的所有的數據庫: show databases;

4.查看某個數據庫的各種信息: show create database 數據庫名;
查看employee的建表語句:show create table employee;

5.刪除數據庫:drop database 數據庫名稱;

6.切換數據庫:use 數據庫名;

7.查看正在使用的數據庫: select database();

8.創建表:
create table 表名(
字段名 類型(長度) 約束,
字段名 類型(長度) 約束
);
create table sort (
sid int primary key auto_increment, #分類ID (該鍵為主鍵,并且長度會自動增長,切記如果不是最后一行要加上逗號)
sname VARCHAR(100) #分類名稱
);

時間類型:
? date: yyyy-MM-dd; datetime:日期和時間 yyyy-MM-dd HH:mm:ss; timeStamp: 時間戳

9.刪除主鍵:alter table 表名 drop primary key;

10.刪除一個表:drop table 表名; (alter table 表名 drop 列名;)刪除一個列

11.查看數據庫中的所有表:show tables;

12.查看表結構:desc 表名;

13.修改表結構格式(添加一列):alter table 表名 add 列名 類型(長度) 約束;

14.修改表修改列的類型長度及約束:alter table 表名 modify 列名 類型(長度) 約束;
alter table sort modify sname varchar(50) not null;

15.修改表修改列名:alter table 表名 change 舊列名 新列名 類型(長度) 約束;
注意:不能將原本含有null值的列的約束改為not null;如下所示,名字可以改但約束不對:
alter table lam change ext extra2 varchar(10) not null;

16.修改表名:rename table 表名 to 新表名;

17.修改表的字符集:alter table 表名 character set 字符集;

18.向表中的列插入數據語法:
如果插入空值,請使用null
插入的日期和字符串,使用單引號括起來。
insert into 表 (列名1,列名2,列名3..) values(值1,值2,值3..); (向表中插入某些列)
insert into 表 values (值1,值2,值3..); (向表中插入所有列)

19.將指定的sname字段中的值 修改成 日用品
update sort set sname='日用品';
--將sid為s002的記錄中的sname改成 日用品
update sort set sname='日用品' where sid='s002';
--將名字為王安全和黃海波的type改成4
update star set type=4 where name='王安全' or name='黃海波';
--將龍太子的價格在原價格的基礎上增加2000
update star set price=price+2000 where name='房祖名';
--統計每個學生的總分。
select *,chinese+math+english from exam;
--查詢總分大于200分的所有同學
select * from exam where chinese+math+english>200;
--求班級最高分和最低分(數值范圍在統計中特別有用)
select max(ifnull(chinese,0)+ifnull(math,0)+ifnull(english,0)) from exam;
select min(ifnull(chinese,0)+ifnull(math,0)+ifnull(english,0)) from exam;

20.刪除表: delete from 表名 [where 條件] 或者 truncate table 表名;
delete:一條一條刪除,如果沒加條件相當于將表中的數據全部刪除,不清空auto_increment記錄數,表結構還在;刪除后的數據可以找回
truncate:直接將表刪除,重新創建一張一模一樣的空表(速度快!),auto_increment將置為零,從新開始。

21.查詢表中所有字段: select * from 表名;
select 字段1,字段2,...from 表名;
例如:
select id,name from zhangwu; (查詢id和name這兩列的數據)

22.去除重復字段:?
distinct用于去除重復記錄
select distinct 字段 from 表名;
例如:
select distinct money from zhangwu; (去除money這一列中的重復數據并顯示出來)
select distinct age,name from star; (表示去掉所有行里面年齡和name都相同的行,并將age和name這兩列打印出來)

23.where和having的區別
(1) having是在分組后對數據進行過濾.where是在分組前對數據進行過濾
(2) having后面可以使用聚合函數(統計函數)where后面不可以使用聚合函數
(3) having后面加的條件一定要與分組有關。(不明白也沒關系)

24.表別名: (暫時修改表名)
select 字段名 as 別名 from 表名; 其中as可以省略
select name as nam from star;

25.列運算:
select zname,zmoney+1000 as 'sum' from zhangwu;

26.查詢所有的吃飯支出
select * from zhangwu where zname='吃飯支出';

27.查詢金額大于1000的所有數據
select * from zhangwu where zmoney>1000;

28.查詢金額在2000到5000之間
select * from zhangwu where zmoney >= 2000 and zmoney <= 5000;
改造成between and 方式
select * from zhangwu where zmoney between 2000 and 5000;
between...and...: 包含臨界值 eg: between 3000 and 6000相當于: 3000<=price<=6000

29.查詢金額是 1000,3500,5000 其中一個
select * from zhangwu where zmoney = 1000 or zmoney=3500 or zmoney=5000;
改造成in方式
select * from zhangwu where zmoney in (1000,3500,5000);

30.模糊查詢,like和通配符一起使用:
select * from zhangwu where zname like '%支出%';
select * from star where name like('周%');
? 占位符: % : 多位(0~n)
? _ : 一位

31.查詢賬務名字,五個字符的
select * from zhangwu where zname like'_____';

32.查詢賬務名,不為空的
select * from zhangwu where zname is not null;
select * from zhangwu where not ( zname IS NULL);

33.聚合函數 (聚合函數的前面不能有字段名,如果一定要有,那么該字段名只能是用來分組的字段名)

聚合函數不能寫在where條件中
聚合函數是用來做縱向運算的函數

? count(*|字段);統計指定列不為NULL的記錄行數,一般用來統計表中的總數據數

? 如果要統計表中的總記錄數,那么count( *|不能為空的字段名)

? sum();計算指定列的數值和,如果指定列類型不是數值類型,那么計算結果為0

? max();計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算

? min();計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算

? avg();計算指定列的平均值,如果指定列類型不是數值類型,那么計算結果為0

34.查找所有明星的記錄,按照價格升序
select * from star order by price asc; (切記沒有where)

  • 查找所有明星的記錄,按照價格升序,如果價格一樣,按照年齡降序
    select * from star order by price asc,age desc;

  • 統計star表中的總數據量,因為count()函數統計的是不為空的數據
    select count(*) from star;

  • 求明星價格的總和
    select sum(price) from star;

  • 查詢身價最高的明星
    select max(price) from star;

-查詢明星的平均價格
select avg(price) from star;

如果有分組,select后面加的第一個字段名一定是用來分組的字段名**
select type,group_concat(name,age,sex) from star group by type;

-統計每一組的數據出現次數的總和,count()這一列的值代表type這一列中每個相同數據出現次數的統計
select type,count(
) from star group by type;

-統計每一組的相同數據的價格總和,sum(price)這一列的值代表age這一列中所有年齡相同的人的身價總和
select age,sum(price) from star group by age;

-在各個價格相同的組中,挑選出年齡最小的數據
select price,min(age) from star group by price;

-根據明星類別分組,統計不同明星類別的個數,并且該明星類別數量大于2并且年齡大于30的才查詢出來
select type,count() from star where age>30 group by type having count()>2;


多表操作:
-- 使用type作為外鍵,指向category表中的cid
ALTER TABLE star ADD constraint fk_star FOREIGN KEY(TYPE) REFERENCES category(cid);

-- 刪除外鍵
alter table star drop constrain fk_star;

-- 結合兩張表一起來查詢
SELECT * FROM star,category;

-- 篩選正確數據
SELECT * FROM star,category WHERE star.type=category.cid;

-- 給隱式內連接查詢加上一個別名
SELECT * FROM star s,category c WHERE s.type=c.cid;

-- 顯示內連接查詢,inner可以省略
SELECT * FROM star s INNER JOIN category c ON s.type=c.cid;

-- 使用左外鏈接查詢,顯示主表的所有數據
(打印出左邊star表的所有內容,左邊star表不符合的內容用null顯示,打印右邊表格category符合條件的內容)
SELECT * FROM star s LEFT OUTER JOIN category c ON s.type=c.cid;

-- 使用右外連接查詢,顯示主表的所有數據
(打印右邊category表的所有內容,右邊category表不符合的內容用null顯示,打印左邊表格category符合條件的內容)
SELECT * FROM star s RIGHT OUTER JOIN category c ON s.type=c.cid;

-- 使用子查詢,查出身價最高的明星的信息
SELECT * FROM star WHERE price=(SELECT MAX(price) FROM star); //后面小括號返回的是最高的price值

-- 使用子查詢查詢價格高于IPhone8的商品信息
SELECT * FROM product WHERE price>(SELECT price FROM product WHERE pname='IPhone8')

-- 查詢和農夫山泉是同一類別的商品信息且不能包含農夫山泉
SELECT * FROM product WHERE TYPE=(SELECT TYPE FROM product WHERE pname='農夫山泉') AND pname <> '農夫山泉'

-- 查詢類別是手機數碼的所有商品信息 //前提是product里面的type為category2表的外鍵
SELECT * FROM product WHERE TYPE=(SELECT cid FROM category2 WHERE cname='手機數碼')

-- 聯合查詢
CREATE TABLE A(
NAME VARCHAR(10),
score INT
)
CREATE TABLE B(
NAME VARCHAR(10),
score INT
)
//一次性插入多組數據
INSERT INTO A VALUES('a',10),('b',20),('c',30);
INSERT INTO B VALUES('a',10),('b',20),('d',40);

-- 聯合查詢,將兩個SQL語句查詢出來的結果集進行合并
SELECT * FROM a UNION SELECT * FROM b //去重排序出來
SELECT * FROM a UNION ALL SELECT * FROM b //全部顯示,不去重

-- 分頁查詢,limit a,b,a表示從第幾條數據開始查詢,b表示每頁的數據條數。如果客戶端給咱們這樣傳數據,那我就開心啦。
-- 客戶端只會傳給服務器,頁數和每頁的數據條數
-- 如果客戶端傳過來 1,3表示,客戶端需要第一頁的數據,每頁3條數據
-- 服務器拿到頁數和每頁的數據條數之后,要將頁數轉換成從第幾條數據開始
SELECT * FROM star LIMIT 0,3

-- 客戶端給你傳2,3
SELECT * FROM star LIMIT 3,3

-- 客戶端給你傳3,3
SELECT * FROM star LIMIT 6,3

-- 總結一個公式,將客戶端傳過來的頁數page 轉換成limit a,b中的a
-- a=(page-1)*b

-- 使用分頁查詢,查詢出來身價最高的明星信息
-- 先按照=身價由高到低排序,然后使用分頁查詢查詢出第一條數據
SELECT * FROM star ORDER BY price DESC LIMIT 0,1


多表練習:

--新建一個day09_exercise的數據庫
create database day09_exercise;
use day09_exercise;

-- 新建一個用戶表(user)
create table user(
id int auto_increment primary key,
username varchar(50)
);

-- 新建一個訂單表(orders)
create table orders(
id int auto_increment primary key,
price double,
user_id int
);
-- 給訂單表添加外鍵約束
alter table orders add constraint user_fk foreign key (user_id) references user(id);

-- 向user表中添加數據
insert into user values(3,'張三'),(4,'李四'),(5,'王五'),(6,'趙六');

-- 向orders 表中插入數據
insert into orders values(1,1314,3),(2,1314,3),(3,15,4),(4,315,5),(5,1014,null);

練習:
--查詢用戶的訂單,沒有訂單的用戶不顯示
select *from user,orders where user.id=orders.user_id;
或者select * from user join orders on user.id=orders.user_id;

--查詢所有用戶的訂單詳情
select *from user left join orders on user.id=orders.user_id;

--查詢所有訂單的用戶詳情
select *from user right join orders on user.id=orders.user_id;

練習:
--查看用戶為張三的訂單詳情
答案:select * from orders where user_id = (select id from user where username = "張三");

--查詢出訂單的價格大于300的所有用戶信息。
答案:select * from user where id in (select user_id from orders where price>300); //注意in后面有空格

--查詢訂單價格大于300的訂單信息及相關用戶的信息。
SELECT * from user,orders where user.id=orders.user_id and orders.price > 300;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370

推薦閱讀更多精彩內容