1 建立數據庫數據庫
1.1數據庫基本結構數據結構
數據庫:數據庫是表的集合,帶有相關的數據。 app
表:一個表是多個字段的集合。函數
字段:一個字段是一列數據,由字段名和記錄組成測試
1.2建立數據庫大數據
create database 數據庫名稱;ui
例:建立名爲test的測試數據庫blog
create database test;排序
1.3查看建立好的數據庫:圖片
show create database 數據庫名稱;
例: 查看建立好的test數據庫
show create database test;
1.4查看全部數據庫列表:show databases;
1.5 使用數據庫:
use 數據庫名稱;
例: 使用建立好的test數據庫
use test;
1.6 刪除數據庫:
drop database 數據庫名稱;
例: 刪除建立好的test數據庫
drop database test;
2 建立數據表
– 數據庫是由多個數據表構成的
– 每張數據表存儲多個字段
– 每一個字段由不一樣的字段名及記錄構成,每一個字段有本身的數據結構及約束條件
2.1 建立數據表:
create table 表名(…);
– 例:用SQL語句建立如下員工信息表
1. 使用test數據庫: use test;
2. 建立員工信息表:
create table emp(
depid char(3),
depname varchar(20),
peoplecount int
);
3. 查看錶是否建立成功: show tables;
4. 刪除數據表: drop table emp;
3 數據類型
3.1數值類型:
– INT:有符號的和無符號的。有符號大小-2147483648~2147483647,無符號大 0~4294967295。寬度最多爲11個數字- int(11)
– TINYINT:有符號的和無符號的。有符號大小-128~127,無符號大小爲0~255。寬 度最多爲4個數字- tinyint(4)
– SMALLINT:有符號的和無符號的。有符號大小-32768~32767,無符號大小爲 0~65535。寬度最多爲6個數字- smallint(6)
– MEDIUMINT:有符號的和無符號的。有符號大小-8388608~8388607,無符號大 小爲0~16777215。寬度最多爲9個數字- mediumint(9)
– BIGINT:有符號的和無符號的。寬度最多爲20個數字- bigint(20)
– FLOAT(M,D):只能爲有符號的。默認爲(10,2)
– DOUBLE(M,D):只能爲有符號的。默認爲(16,4)
– DECIMAL(M,D):只能爲有符號的。
3.2日期和時間類型 :
– DATE:YYYY-MM-DD格式,在1000-01-01和9999-12-31之間。例如: 1973-12-30
– DATETIME:YYYY-MM-DD HH:MM:SS格式,位於1000-01-01 00:00:00 和9999-12-31 23:59:59之間。例如:1973-12-30 15:30:00
– TIMESTAMP:稱爲時間戳,在1970-01-01 00:00:00和2037-12-31 23:59:59之間。
例如,1973年12月30日下午15:30,則在數據庫中存儲 爲:19731230153000
– TIME: 以HH:MM:SS格式, -838:59:59~838:59:59
– YEAR(2|4): 以2位或4位格式存儲年份值。若是是2位,1970~2069;如 果是4位,1901~2155。默認長度爲4
3.3 字符串類型 :
– CHAR(M):固定長度字符串,長度爲1-255。若是內容小於指定長度, 右邊填充空格。若是不指定長度,默認爲1
– VARCHAR(M): 可變長度字符串,長度爲1-255。定義該類型時必須 指定長度
– BLOB 或TEXT:最大長度65535。存儲二進制大數據,如圖片。不能 指定長度。二者區別:BLOB 大小寫敏感
– TINYBLOB 和TINYTEXT:最大長度255。不能指定長度。
– MEDIUMBLOB 或MEDIUMTEXT:最大長度16777215 字符
– LONGBLOB 或LONGTEXT:最大長度4294967295 字符
– ENUM:枚舉。例如:ENUM(‘A’,’B’,’C’)。NULL 值也可
4 約束條件
– 約束是在表上強制執行的數據檢驗規則
– 用來保證建立的表的數據完整和正確
– MySQL數據庫經常使用約束條件
約束條件 | 說明 | 語法 |
PRIMARY KEY | 主鍵約束 | 字段名 數據類型 PRIMARY KEY |
NOT NULL | 非空約束 | 字段名 數據類型 NOT NULL |
UNIQUE | 惟一約束 | 字段名 數據類型 UNIQUE |
AUTO_INCREMENT | 自增字段 | 字段名 數據類型 AUTO_INCREMENT |
DEFAULT | 默認值 | 字段名 數據類型 DEFAULT 默認值 |
4.1 主鍵約束:
保證表中每行記錄都不重複 主鍵,又稱爲」主碼」,是數據表中一列或多列的組合。
鍵約束要求主鍵列的數據必須是 惟一的,而且不容許爲空。
使用主鍵,可以唯一地標識表中的一條記錄,而且能夠結合外鍵 來 定義不一樣數據表之間的關係,還能夠加快數據庫查詢的速度。
主鍵分爲兩種類型:
-- 單字段主鍵:
create table emp(
depid char(3) primary key,
depname varchar(20),
peoplecount int
);
-- 多字段聯合主鍵:
create table emp(
depid char(3),
depname varchar(20),
peoplecount int,
primary key(depname,depid)
);
4.2非空約束
指的是字段的值不能爲空:
– 語法:字段名 字段類型 not null
create table emp(
depid char(3) primary key,
depname varchar(20) not null,
peoplecount int
);
4.3惟一性約束
要求該列的值必須是惟一的:
– 容許爲空,但只能出現一個空值;
– 一個表中能夠有多個字段聲明爲惟一的;
– 惟一約束確保數據表的一列或幾列不出現重複值;
– 語法:字段名 數據類型 unique
create table emp(
depid char(3) primary key,
depname varchar(20) not null,
peoplecount int unique
);
4.4默認約束
指定某個字段的默認值:
– 若是新插入一條記錄時沒有爲默認約束字段賦值,那麼系統就會自動爲 這個字段賦值爲默認約束設定的值
– 語法: 字段名 數據類型 default 默認值
create table emp(
depid char(3) primary key,
depname varchar(20) not null default '-',
peoplecount int unique
);
4.5自增字段
一個表只能有一個自增字段,自增字段必須爲主鍵的一部分。默認狀況下 從1開始自增
例: 建立含各類約束條件的數據表
CREATE TABLE example(
id INT PRIMARY KEY AUTO_INCREMENT, -- 建立整數型自增主鍵
name VARCHAR(4) NOT NULL, -- 建立非空字符串字段
math INT DEFAULT 0, -- 建立默認值爲0的整數型字段
minmax FLOAT UNIQUE – 建立惟一約束小數型字段
);
5 導入數據
5.1 用insert into語句爲表插入數據
語法: insert into 表名(字段1,字段2,…) values ……
-- 插入數據
insert into fruits(f_id,s_id,f_name,f_price)
values('a1',101,'apple',5.2),
('b1',101,'blackberry',10.2),
('bs1',102,'orange',11.2),
('bs2',105,'melon',8.2),
('t1',102,'banana',10.3),
('t2',102,'grape',5.3);
5.2 導入外部數據
導入外部文本文件:
-- 爲Monthly_Indicator表導入外部txt文件
load data local infile '文件路徑.txt’ -- 路徑不能有中文,複製的路徑的的"\"應改成"\\"或''/''
into table Monthly_Indicator -- 導入表..中
fields terminated by '\t' -- 字段間的分隔符: '\t'用空格分隔的 , '\,'用逗號分隔的
ignore 1 lines; -- 忽略第一行。若是源表中第一行爲表頭行,則忽略第一行
5.3 檢查表數據
對導入表中的數據通常從導入內容、導入數據總行數以及表結構三方面進行檢查
-- 檢查導入內容 Select * from Monthly_Indicator;
-- 檢查導入數據總行數 Select count(*) from Monthly_Indicator;
-- 檢查表結構 Desc Monthly_Indicator;
6 修改數據表 alter table...
修改表指的是修改數據庫中已經存在的數據表的結構:
– MySQL使用alter table語句修改數據表結構,
包括: 修改表名,修改字段數據類型或 字段名,增長和刪除字段,修改字段的排列位置等
– 例:將數據表emp更名爲empdep alter table emp rename empdep;
– 例:將數據表empdep中depname字段的數據類型由varchar(20)修改爲varchar(30) alter table empdep modify depname varchar(30);
– 例:將數據表empdep中depname字段的字段名改成dep alter table empdep change depname dep varchar(30);
– 例:將數據表empdep中dep字段的字段名改回爲depname,並將該字段數 據類型該回爲varchar(20)
alter table empdep change dep depname varchar(20);
– 例:爲數據表empdep添加新字段maname,新字段數據類型爲varchar(10), 約束條件爲非空
alter table empdep add maname varchar(10) not null;
– 例:將數據表empdep中maname字段的排列順序改成第一位 alter table empdep modify maname varchar(10) first;
– 例:將數據表emp中maname字段的排列順序改到depid字段以後 alter table empdep modify maname varchar(10) after depid;
– 例:刪除maname字段 alter table empdep drop maname;
7 修改記錄
update…set:爲字段賦值,語法爲update 表名 set 字段名 = 值;
例: 使用concat函數在f_name字段值前添加'fruit_’信息
update fruits set f_name = concat('fruit_',f_name);
delete: 刪除數據表中的數據,
語法爲DELETE FROM 表名 [WHERE Clause], 若是省略where的話則刪除表中全部數據記錄
例: 刪除f_id爲'b5'的數據記錄
delete from fruits where f_id = 'b5';
8 SELECT語句
8.1SELECT語句的操做符
- 算術操做符 +(加號)、-(減號)、*(乘號)和 /(除號)。
- 比較操做符 =(等於)、>(大於)、<(小於)、<=(小於等於)、>=(大於等於)、!= 或<> (不等於)、!>(不大於)和 !<(不小於),共9種操做符。
- 邏輯操做符
8.2 聚合類函數
8.3SQL的數據查詢功能
SELECT語句的語法
SELECT〈目標列組〉
FROM〈數據源〉
[WHERE〈元組選擇條件〉]
[GROUP BY〈分列組〉[HAVING 〈組選擇條件〉]]
[ORDER BY〈排序列1〉〈排序要求1〉 [,…n]];
-- 對大氣質量表進行有選擇的查詢
select city_name, avg(pm25), avg(pm10) from Monthly_Indicator
where pm25 > 50
group by city_name, month_key having city_name <> '北京’
order by avg(pm25) desc;
8.4 聯接查詢
聯接查詢,是將兩個或多個表橫向聯接,再進行查詢,通常爲1表出維度,多表出值
按聯接方向可分爲: 左聯接,右聯接,內聯接
8.4.1 內鏈接: 按照鏈接條件合併兩個表,返回知足條件的行。
SELECT <select_list> FROM A INNER
JOIN B ON A.Key = B.Key;
8.4.2左鏈接: 結果中除了包括知足鏈接條件的行外,還包括左表的全部行
SELECT <select_list> FROM A
LEFT JOIN B ON A.Key = B.Key;
8.4.3 右鏈接: 結果中除了包括知足鏈接條件的行外,還包括右表的全部行
SELECT <select_list> FROM A
RIGHT JOIN B ON A.Key = B.Key;
8.5 表格合併與聯合查詢
表格合併可理解爲在前表基礎上增長記錄,即若是字段名相同,把後表的記錄增長到前表記錄中,若是字段名不一樣,則自動增長字段名,若是前表中無後表的字段名,再自動爲空值。
union: 用於合併兩個或多個 SELECT 語句的結果集,並消去表中任何重複行。
例: 用union合併t1與t2表
select t1.* from t1
union
select t2.* from t2;
union all:用於合併兩個或多個 SELECT 語句的結果集,保留重複行。
例: 用union all合併t1與t2表
select t1.* from t1
union all
select t2.* from t2;
8.6查詢操做符列表
distinct操做符
distinct: 用來消除重複記錄。
例: 查詢fruits表中全部不重複的s_id
select distinct s_id from fruits;
8.7 子查詢
子查詢:寫在()中,把內層查詢結果當作外層查詢參照的數據表來用
例: 用in操做符與子查詢語句來查詢全部f_id對應的f_price在10元到20元之間的水果記錄
select * from fruits where f_id in
(select f_id from fruits where f_price between 10 and 20);
例: 用any操做符與子查詢語句來查詢全部f_id對應的f_price在10元到20元之間的水果記錄
select * from fruits where f_id = any
(select f_id from fruits where f_price between 10 and 20);
例: 用all操做符與子查詢語句來查詢全部f_price大於20元的水果記錄
select * from fruits where f_price > all
(select f_price from fruits where f_price < =20);
例: 用exists操做符與子查詢語句來查詢是否存在f_price大於30元的水果記錄
select * from fruits where exists
(select * from fruits where f_price > 30);
8.8 as重命名與limit限制查詢結果行數
as:能夠將表名從新命名爲別的名稱使用,只在查詢中有效
例: 用as將fruits表名重命名爲f後使用
select f.* from fruits as f;
limit:查詢後只顯示limit指定數字的行數結果
例: 顯示f_price金額最大的前三名水果記錄
select * from fruits
order by f_price desc
limit 3;
9 經常使用函數
9.1經常使用的數學函數:主要用於處理數字值
9.2經常使用的字符串函數:主要用於處理字符串值
9.3日期及時間函數:用來處理日期時間型數據
9.4其餘函數:除上述函數以外的一些經常使用函數
※GROUP_CONCAT()函數:常與關鍵字 GROUP BY 一塊兒使用,可以將分組後指定的字段值都顯示出來。
例: 使用group_concat函數查詢不一樣s_id下對應的全部f_name信息
SELECT s_id, GROUP_CONCAT(f_name) FROM fruits
GROUP BY s_id;
CAST函數語法規則是:Cast(字段名 as 轉換的類型 ),其中類型能夠爲:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和時間型
DECIMAL 小數型
SIGNED 整數型
TIME 時間型
將fruits表的f_price 轉換爲 1位小數
select cast(f_price as decimal(10,1)) as f_price from fruits;