Mysql(2)查詢實例

一:MySQL簡介與安裝

? ? MySQL是一種中型评架、易用的關系型數(shù)據(jù)庫管理系統(tǒng)(DBMS,Database Management System)诡壁。

? ? 安裝步驟:

? ? 第一步:? sudo apt-get install mysql-server

? ? 第二步:? sudo apt install mysql-client

? ? 第三步:? sudo apt install libmysqlclient-dev

? ? 進入MySQL環(huán)境:

? ? mysql -u root -p

二:MySQL常用操作命令

? ? 1. show databases;? ? ? # 顯示所有數(shù)據(jù)庫

? ? 2. use 數(shù)據(jù)庫名稱;? ? ? # 進入(使用)某個數(shù)據(jù)庫

? ? 3. show tables;? ? ? ? # 顯示當前數(shù)據(jù)庫中所有的表

? ? 4. desc 表名稱;? ? ? ? # 查看表的結構

三:基本SQL語句

? ? SQL:Structured Query Language深滚,結構化查詢語言惜浅,專門用來操作關系型數(shù)據(jù)庫的

? ? ? ? 語言。

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

? ? ? create database 數(shù)據(jù)庫名 [default character set 'utf8'];

? ? 2. 創(chuàng)建表

? ? ? create table 表名稱(

? ? ? ? ? 字段名? 字段數(shù)據(jù)類型? 約束,

? ? ? ? ? 字段名? 字段數(shù)據(jù)類型? 約束,

? ? ? ? ? ......

? ? ? ? ? 字段名? 字段數(shù)據(jù)類型? 約束

? ? ? );

? ? 3. 插入記錄

? ? ? 方式一:

? ? ? insert into 表名稱(字段名1,字段名2,...)values(值1,值2,...);

? ? ? 方式二:

? ? ? insert into 表名稱 values(值1,值2,...);

? ? ? 方式三:

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

? ? ? ? (值1,值2,...).....(值1,值2,...);

? ? 4. 修改記錄

? ? ? update 表名稱 set 字段名=修改值 [,字段名=修改值,...] [where 條件];

? ? 5. 刪除記錄

? ? ? delete from 表名稱 [where 條件];

? ? 6. 查詢記錄

? ? ? select 字段列表 from 表名稱 [where 條件];

? ? 7. 增加一個字段

? ? ? alter table 表名 add 新字段的名字? 字段屬性

? ? ? alter table students add sex char(10)

? ? 8. 刪除一個字段

? ? ? alter table 表名 change 老字段名 新字段名 字段屬性;

? ? ? 例如:

? ? ? alter table students change id id int(4) auto_increment;

? ? 9. 修改某個字段 --- 修改屬性

? ? ? alter table students change id id int(4);

? ? 10. 修改某個字段 --- 刪除主鍵

? ? ? ? alter table students drop primary key;

? ? 11. 修改某個字段 --- 添加主鍵

? ? ? ? alter table students add primary key(id);

? ? ? ? alter table students change id id int(4) primary key;

四:限制查詢、分頁查詢、排序查詢、分組查詢

? ? 1.限制查詢

? ? ? 第一種情況:查詢限定條數(shù)

? ? ? select 字段列表 from 表名稱 [where 條件] limit 最多記錄數(shù);

? ? ? 第二種情況:從指定偏移量查詢限定條數(shù)

? ? ? select 字段列表 from 表名稱 [where 條件] limit 偏移量,最多記錄數(shù);

? ? 2.分頁查詢

? ? ? 已知當前頁為currentPage,每頁最多顯示的記錄數(shù)為pageSize,則currentPage頁

? ? ? 顯示的表中的記錄為:

? ? ? select 字段列表 from 表名稱 [where 條件]

? ? ? ? limit (currentPage-1)*pageSize,pageSize;

? ? 3.排序查詢

? ? ? select 字段列表 from 表名稱 [where 條件] order by 字段名[desc] [,字段名...];

? ? 4.MySQL中的聚合函數(shù)

? ? ? A:? max(字段名)? 獲取某字段中的最大值

? ? ? B:? min(字段名)? 獲取某字段中的最小值

? ? ? C:? sum(字段名)? 計算某字段值的和

? ? ? D:? avg(字段名)? 計算某字段的平均值

? ? ? E:? count(字段名) 計算某字段值中不為null的記錄數(shù)

? ? ? ? ? count(*)? 計算表中的總記錄數(shù)

? ? 5.分組查詢

? ? ? select 字段列表 from 表名稱 [where 條件]

? ? ? ? ? group by 分組字段列表 [having 對分組后的篩選條件];

? ? ? 注意:select后的字段列表應該包含在group by后的分組字段列表中!

一:模糊查詢

? ? 模糊查詢中的兩個通配符:

? ? 1.? %? 代表任意多個任意字符

? ? 2.? _? 代表任意一個字符

? ? 模糊查詢的SQL語法:

? ? select 字段列表 from 表名稱 where 字段名 like 匹配條件;

二:外鍵(foreign key)

? ? 外鍵用來約束子表的記錄與父表對應腐缤。

? ? constraint 約束名 foreign key(用來關聯(lián)父表的字段)

? ? ? ? ? ? ? references 父表名(父表中用來關聯(lián)子表的字段,一般為主鍵);

三:多表查詢

? ? 1. 等值連接

? ? ? select 字段列表 from 表A,表B,... where 連接條件 [其他過濾條件];

? ? 2. 內(nèi)連接

? ? ? select 字段列表 from 表A inner join 表B on 連接條件 [其他過濾條件];

? ? 3. 外連接

? ? ? 左外連接:

? ? ? select 字段列表 from 表A left join 表B on 連接條件 [其他過濾條件];

? ? ? 注意:左外連接的查詢結果不但包括了符合連接條件的查詢記錄肛响,而且還包括了

? ? ? ? ? ? 左表中不符合連接條件的記錄岭粤。

? ? ? 右外連接:

? ? ? select 字段列表 from 表A right join 表B on 連接條件 [其他過濾條件];

? ? ? 注意:右外連接的查詢結果不但包括了符合連接條件的查詢記錄,而且還包括了

? ? ? ? ? ? 右表中不符合連接條件的記錄特笋。

例子1:(多表查詢)

1.使用“等值連接”查詢學生姓名剃浇、學生成績、學校名稱猎物。

? select student.name,student.score,school.schoolname?

? ? ? from school,student where student.school_id=school.schoolid;

2.使用“等值連接”查詢出“張紅”的學生姓名虎囚、學生成績、學校名稱蔫磨。

? select student.name,student.score,school.schoolname?

? ? ? from school,student where student.school_id=school.schoolid

? ? ? ? and student.name='張紅';

3.使用“內(nèi)連接”查詢學生姓名淘讥、學生成績、學校名稱堤如。

? select student.name,student.score,school.schoolname?

? ? ? from school inner join student on student.school_id=school.schoolid;

4.使用“內(nèi)連接”查詢出“張紅”的學生姓名蒲列、學生成績窒朋、學校名稱。

? select student.name,student.score,school.schoolname?

? ? ? from school inner join student on student.school_id=school.schoolid

? ? ? and student.name='張紅';

5.先插入一條學校記錄蝗岖,再使用“左外連接”查詢學生姓名侥猩、學生成績、學校名稱,

? 要求顯示所有學校的記錄抵赢。

? insert into school(schoolname,note)values('東北師范',null);


? select student.name,student.score,school.schoolname?

? ? ? from school left join student on student.school_id=school.schoolid;

例子2:(限制欺劳,分頁。铅鲤。划提。。)

1.創(chuàng)建一個名為mydb的數(shù)據(jù)庫

? create database mydb default character set 'utf8';

2.進入mydb

? use mydb;

13:55 2018/5/29

3.創(chuàng)建student表

? create table student(

? ? stuid? int? auto_increment primary key,

? ? name? varchar(20)? not null,

? ? age? ? int,

? ? score? float? ? not null,

? ? note? ? text

? );

4.向student表中插入一條記錄

? insert into student(name,age,score,note)values('風清揚',20,93.5,'風清揚獨孤九劍');

? 插入成功之后邢享,查詢表的所有記錄:

? select * from student;

? insert into student values(23,'令狐沖',18,65.5,'家住華山');

? insert into student(name,age,score)values('郭靖',25,62),('黃蓉',24,73.5),

? ('馬云',40,79.5);

5.把學生表中所有的記錄的成績score改為60分

? update student set score=60;

6.將姓名為“令狐沖”的記錄的成績改為75分

? update student set score=75 where name='令狐沖';

7.刪除學號為27的學生記錄

? delete from student where stuid=27;

8.查詢所有學生的姓名和成績腔剂,并以別名的形式顯示字段

? select name as 姓名,score as 成績 from student;

9.查詢出所有成績在85到95之間的學生記錄

? select * from student where score >=85 and score <= 95;

? 或者

? select * from student where score between 85 and 95;

10.查詢所有備注信息不為null的學生記錄

? select * from student where note is not null;

11.查詢學生表中的前三條記錄

? select * from student limit 3;

12.查詢成績大于等于70分的學生中,前兩條記錄

? select * from student where score >= 70 limit 2;

13.查詢學生表中第三條與第四條記錄

? select * from student limit 2,2;

14.假如每頁最多顯示2條記錄驼仪,查詢第三頁應該顯示的記錄

? select * from student limit 4,2;

15.按照成績從高到低掸犬,將學生排序

? select * from student order by score desc;

16.按照成績從高到低,將學生排序,如果成績相等則再按照年齡降序排序

? select * from student order by score desc,age desc;


===========================以下為分組查詢相應的SQL===========================

17.創(chuàng)建商品表product绪爸,并添加記錄

? create table product(

? ? ? proid? ? int? ? auto_increment? primary key,

? ? ? proname? varchar(20)? not null,

? ? ? price? ? float? not null,

? ? ? type? ? ? varchar(20)? not null,

? ? ? note? ? ? text

? );

? insert into product(proname,price,type,note)values('鍋巴',5,'零食',null),

? ? ('洗衣粉',8,'日用品',null),('可口可樂',12,'飲料','新品上市的Cola'),

? ? ('辣條',2,'零食',null),('臉盆',10,'日用品',null),('薯片',13,'零食',null),

? ? ('脈動',6,'飲料',null);

18.按照商品類型type對product表中的記錄進行分組湾碎,求出每一組的平均價格

? select type as 類型,avg(price) as 平均價格 from product group by type;

19.按照商品類型type對product表中的記錄進行分組,求出零食組的平均價格

? select type as 類型,avg(price) as 平均價格 from product

? ? group by type having type='零食';

例子三:(模糊查詢)

創(chuàng)建worker表

create table worker(

? work_id? int? auto_increment primary key,

? name? ? varchar(20),

? job? ? varchar(20),

? salary? float

);

insert into worker(name,job,salary)values('張二強','修車',5000),

? ('王小剛','美容',3500),('李剛','經(jīng)理',6000),('王娟','老板娘',7000);

1. 查詢所有姓王的工人

? select * from worker where name like '王%';

2. 查詢名字中帶有“剛”的工人

? select * from worker where name like '%剛%';

3. 查詢名字中第二個字是"剛"的工人

? select * from worker where name like '_剛%';

例子四:(外鍵)

學校表

create table school(

? schoolid? ? int? auto_increment primary key,

? schoolname? varchar(30)? not null,

? note? ? ? text

);

insert into school(schoolname,note)values('清華大學','清華大學很好')

? ,('北京大學','北大不錯'),('交大','交大也很好');

學生表

create table student(

? stuid? ? int? auto_increment primary key,

? name? ? varchar(20) not null,

? score? double not null,

? sex? ? varchar(10),

? school_id int,

? constraint fk_student foreign key(school_id) references school(schoolid)

? ? on delete cascade on update cascade

);

insert into student(name,score,sex,school_id)values('張三',92,'男',1),

? ? ('張三豐',96,'男',1),('李娟',88,'女',2),('張紅',86,'女',2),

? ? ('李芬',85,'女',3);


四:子查詢(嵌套查詢)

? ? 在外部查詢SQL語句中奠货,可以包含其他內(nèi)部查詢的語句介褥,這個內(nèi)部查詢(也叫嵌套查詢)

? ? 就是子查詢;子查詢需要使用括號括起來递惋;子查詢的結果一般作為外部查詢語句的條件柔滔。

? ? 子查詢經(jīng)常使用的關鍵字:

? ? 1. in

? ? ? 判斷某字段的值是否在子查詢結果集中

? ? 2. all

? ? ? 判斷某字段的值是否滿足操作符對子查詢結果集所有值的比較

? ? 3. any

? ? ? 判斷某字段的值是否滿足操作符對子查詢結果集任意一個值的比較

五:“一對多”與“多對多”關系表設計

? ? 1. “一對多”關系表設計:

? ? ? ? 在“多”的一方中,設置外鍵萍虽,關聯(lián)“一”的一方睛廊。(eg:學校表("一")與學生表("多"))

? ? 2. “多對多”關系表設計:

? ? ? ? “多對多”關系表的設計需要引入一個中間表,中間表負責維護“多對多”關系表杉编。

? ? ? ? 中間表至少需要包含兩個字段超全,這兩個字段分別用來關聯(lián)這兩個“多對多”的關系表。

? ? ? ? 通常會將這兩個字段設置成外鍵邓馒,關聯(lián)兩個“多”表的主鍵嘶朱。

? ? ? ? 可以通過將這兩個字段設置成聯(lián)合主鍵的方式,用來避免組合值重復光酣。?

六.配置遠程連接MySQL的權限

? 1.sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

? ? 對該文件進行編輯:注釋掉 bind-address = 127.0.0.1

? 2.進入MySQL環(huán)境,授予root用戶所有權限

? ? grant all on *.* to 'root'@'%' identified by '你自己MySQL的root用戶密碼'

? ? ? ? ? ? ? with grant option;

? 3.刷新權限

? ? flush privileges;

? 4.退出MySQL環(huán)境疏遏,并重啟mysql服務

? ? systemctl restart mysql

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子财异,更是在濱河造成了極大的恐慌下翎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宝当,死亡現(xiàn)場離奇詭異,居然都是意外死亡胆萧,警方通過查閱死者的電腦和手機庆揩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跌穗,“玉大人订晌,你說我怎么就攤上這事“鑫” “怎么了锈拨?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羹唠。 經(jīng)常有香客問我奕枢,道長,這世上最難降的妖魔是什么佩微? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任缝彬,我火速辦了婚禮,結果婚禮上哺眯,老公的妹妹穿的比我還像新娘谷浅。我一直安慰自己,他們只是感情好奶卓,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布一疯。 她就那樣靜靜地躺著,像睡著了一般夺姑。 火紅的嫁衣襯著肌膚如雪墩邀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天盏浙,我揣著相機與錄音磕蒲,去河邊找鬼。 笑死只盹,一個胖子當著我的面吹牛辣往,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殖卑,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼站削,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孵稽?” 一聲冷哼從身側響起许起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤十偶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后园细,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惦积,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年猛频,在試婚紗的時候發(fā)現(xiàn)自己被綠了狮崩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹿寻,死狀恐怖睦柴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毡熏,我是刑警寧澤坦敌,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站痢法,受9級特大地震影響狱窘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜财搁,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一训柴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妇拯,春花似錦幻馁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甘凭,卻和暖如春稀拐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丹弱。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工德撬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躲胳。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓蜓洪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坯苹。 傳聞我的和親對象是個殘疾皇子隆檀,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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

  • MYSQL 基礎知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,787評論 5 116
  • 觀其大綱 page 01 基礎知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 M...
    周少言閱讀 3,154評論 0 33
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname...
    哈哈海閱讀 1,227評論 0 7
  • 1.英語學習并不是一朝一夕的事,他需要長時間的積累,詞匯的積累 語法的積累 2.我學到的怦然心動的單詞:disti...
    侯淑潔閱讀 169評論 1 0
  • 04.04.2018 It’s a day to visit Taska in Lampung. Had a lo...
    快樂很簡單閱讀 308評論 0 0