MySQL數據庫基礎和SQL語言入門
MySQL的安裝和配置
相關概念:
數據庫:數據的倉庫,存儲數據的地方。
表:分類對數據進行存儲,實際保存數據的地方
列(字段):具體的一項信息,如:姓名、年齡
行(記錄):實際的實體信息
主鍵:能唯一地標識一行記錄的列
Navicat圖形工具的使用:
NavicatforMySQL是常用的MySQL客戶端工具,可以從網上下載,免費使用30天。
MySQL數據類型:
數據類型
所占字節
取值範圍
tinyint
1字節
-128~127
smallint
2字節
-32768~32767
mediumint
3字節
-8388608~8388607
int
4字節
範圍-2147483648~2147483647
bigint
8字節
+-9.22*10的18次方
float(m,d)
4字節
單精度浮點型,m總個數,d小數位
double(m,d)
8字節
雙精度浮點型,m總個數,d小數位
decimal(m,d)
decimal是存儲為字符串的浮點數
CHAR
0-255字節
定長字符串
VARCHAR
0-255字節
變長字符串
TINYBLOB
0-255字節
不超過255個字符的二進制字符串
TINYTEXT
0-255字節
短文本字符串
BLOB
0-65535字節
二進制形式的長文本數據
TEXT
0-65535字節
長文本數據
MEDIUMBLOB
0-16777215字節
二進制形式的中等長度文本數據
MEDIUMTEXT
0-16777215字節
中等長度文本數據
LOGNGBLOB
0-4294967295字節
二進制形式的極大文本數據
LONGTEXT
0-4294967295字節
極大文本數據
VARBINARY(M)
允許長度0-M個字節的定長字節符串
值的長度+1個字節
BINARY(M)
M
允許長度0-M個字節的定長字節符串
SQL語言:
SQL全稱是結構化查詢語言(StructuredQueryLanguage)。使用SQL能進行數據庫的增刪查改。學習數據庫的基本核心內容就是SQL。
SQL分類如下:
數據定義語言(DDL:DataDefinitionLanguage)
數據操作語言(DML:DataManipulationLanguage)
數據查詢語言(DQL:DataQueryLanguage)
數據控制語言(DCL:DataControlLanguage)
一、DDL
數據庫定義語言:
創建數據庫
createdatabase數據庫名;
使用數據庫
use數據庫名;
刪除數據庫
dropdatabase數據庫名;
dropdatabaseifexists數據庫名;
創建表
createtable表名(
列名數據類型約束,
...
);
主鍵:primarykey
自動增長:auto_increment
刪除表
droptable表名;
droptableifexists表名;
練習:
創建my_db數據庫
在my_db中,創建學生表,包含編號(主鍵,自增)、姓名、年齡和地址
二、DML
數據新增
insertinto表名(列1,列2...)values(值1,值2...)
示例:
--插入一行記錄
insertintostudent(name,age,gender,address)
values(‘張三‘,20,‘男‘,‘湖北武漢‘);
--插入多行記錄
insertintostudent(name,age,gender,address)
values
(‘李四‘,20,‘男‘,‘湖北武漢‘),
(‘李大四‘,22,‘女‘,‘北京‘),
(‘李小四‘,25,‘女‘,‘北京‘),
(‘李四四‘,27,‘女‘,‘上海‘);
--將表中的數據插入到其它表
insertintostudent2(name,age,gender,address)
selectname,age,gender,addressfromstudent;
註意:
1、自動增長列不要添加數據
2、列的數量、類型和順序要和值一致
數據修改
update表名set列1=值1,列2=值2where條件
示例:
--更新李小四的地址為四川成都
updatestudentsetaddress=‘四川成都‘
wherename=‘李小四‘;
--更新多列
updatestudentsetaddress=‘四川成都‘,age=18
wherename=‘李小四‘;
數據刪除
deletefrom表名where條件
示例:
--刪除id=2的學生
deletefromstudentwhereid=5;
練習:
在學生表中添加5行記錄,
更新id為5的學生年齡為22
刪除id為3的學生
三、DQL
查詢所有數據
select*from表;
查詢指定字段的所有數據
select列1,列2from表;
where條件查詢
select*from表where條件
=、!=、in、notin、and、or
示例:
--查詢所有行所有列
select*fromstudent;
--查詢部分列
selectname,addressfromstudent;
--添加where條件查詢id為2的學生
select*fromstudentwhereid=2;
--查詢id不為2的
select*fromstudentwhereid!=2;
--查詢地址為湖北武漢以及四川成都的學生
select*fromstudentwhereaddress=‘湖北武漢‘oraddress=‘四川成都‘;
--查詢年齡20歲以上的男的
select*fromstudentwhereage>=20andgender=‘男‘;
--查詢地址為湖北武漢以及四川成都的學生2
select*fromstudentwhereaddressin(‘湖北武漢‘,‘四川成都‘);
--查詢地址不是湖北武漢以及四川成都的學生
select*fromstudentwhereaddressnotin(‘湖北武漢‘,‘四川成都‘);
去掉重復數據
distinct關鍵字
selectdistinct列from表;
示例:
--查詢學生的地址,不重復
selectDISTINCTaddressfromstudent;
--給列設置別名
selectid編號,name姓名,age年齡,gender性別,address地址fromstudent;
--查詢年齡在20到25之間的女生
select*fromstudentwhereage>=20andage<=25andgender=‘女‘;
select*fromstudentwhereagebetween20and25andgender=‘女‘;
--查詢北京或武漢的男生
select*fromstudentwhereaddressin(‘北京‘,‘湖北武漢‘)andgender=‘女‘;
排序查詢
select*from表orderby列desc\asc
示例:
--按年齡升序排序
select*fromstudentwheregender=‘男‘orderbyageasc;
--降序
select*fromstudentorderbyagedesc;
分頁查詢
limitn;返回長度為n的行
limitn,m;返回從n位置,長度為m的行
select*fromtb_namelimit5;顯示結果的前5條記錄
select*fromtb_namelimit0,5;區段查詢
示例:
--按年齡升序排序
select*fromstudentwheregender=‘男‘orderbyageasc;
--降序
select*fromstudentorderbyagedesc;
--通過limit限制行數前5行
select*fromstudentlimit5;
--通過limit分頁查詢第一頁第0行到第5行,第二頁第6行到第10行...
select*fromstudentLIMIT0,5;
select*fromstudentLIMIT5,5;
select*fromstudentLIMIT10,5;
練習:
年齡最大的男學生
年齡最小的五個女學生
聚合函數
求和:sum
求平均值:avg
求最大值:max
求最小值:min
求數量:count
示例:
selectsum(col_name)fromtb_name;
分組查詢
groupby分組列
where在分組之前進行條件篩選
having在分組之後進行條件篩選
where-->groupby--->having
示例:
--使用聚合函數
selectsum(age)總年齡,avg(age)平均年齡,
max(age)最大年齡,min(age)最小年齡,count(*)學生數量fromstudent;
--求來之不同地方的學生人數
selectaddress籍貫,count(*)人數fromstudentgroupbyaddress;
--求男女學生的人數
selectgender性別,count(*)人數,avg(age)平均年齡fromstudentgroupbygender;
--求人數超過5人的籍貫
selectaddress籍貫,count(*)人數fromstudent
groupbyaddresshavingcount(*)>=5;
--年齡總和超過200的性別
selectgender性別,sum(age)總年齡fromstudent
groupbygenderhavingsum(age)>200;
模糊查詢
通配符:
%匹配任意多字符
_匹配一個字符
like關鍵字
示例:
--查找所有姓李的人
select*fromstudentwherenamelike‘李%‘;
select*fromstudentwherenamelike‘%大%‘;
select*fromstudentwherenamelike‘李_‘;
?
MySQL數據庫基礎和SQL語言入門