记录的详细操作
拷貝表
拷貝結構 與數據
create table copy_table select *from customer ;
僅拷貝結構
create table copy_table select *from customer where 0 > 1;
共同點: 索引 描述(自增) 不能以下語法中
記錄的詳細操作
[] 表示可選的
{}表示必選的
增
insert [into] 表名[字段名] value|values(字段值....);
into 可省略
[字段名] 可選
如果寫了 你后面的值 必須與 寫的字段匹配
不寫 后面的值 必須和表的結構完全匹配
value 插入一條記錄
values 插入多條記錄
改
update 表名 set 字段名 = 新的值[,字段n = 新值n] [where 條件]
可以同時修改多個字段 用逗號隔開 注意最后一個字段不能加逗號
where 可選
有就 修改滿足條件的記錄
沒有就全部修改
刪
delete from 表名 [where 條件]
where 可選
有就 刪除滿足條件的記錄
沒有就全部刪除
如果你需要全部刪除 請使用truncate table 表名
delete 是逐行比對 刪除 效率低
delete刪除的行號會保留
查詢
完整的查詢語句
select [distinct] {* | 字段名 | 聚合函數 | 表達式} from 表名
[where 條件
group by 字段名
having 條件
order by 字段名
limit 顯示的條數]
注意: 關鍵字的順序必須與上述語法一致
簡單查詢
1.* 表示所有列 都顯示
2.也可以手動指定要顯示的列 可以是多個
3.distinct 用于去除重復的記錄,只取出完全相同的記錄
4.表達式 支持四則運算
執行順序
def select()
from() 打開文件
where() 讀取每一行并判斷是否滿足條件
group() 對數據進行分組
having() 再分組之后進行過濾 having不單獨出現 僅用于分組之后進行過濾
distinct() 去重
order() 用于對篩選后的數據 進行排序
limit() 限制顯示的條數
最后根據select后制定的字段來顯示數據
where
從硬盤上讀取數據時的一個過濾條件
在沒有索引的情況下 挨個比較 效率低
where 條件不能用于篩選分組后的數據
group by
作用:給數據分組方便統計
按照某一字段給數據分組select *from 表名 group by 字段名
有兩種情況
1.sql_mode中 沒有設置 ONLY_FULL_GROUP_BY 顯示每個組的第一條記錄 沒有意義 所以新版中 自ONLY_FULL_GROUP_BY
2.sql_mode中有設置 ONLY_FULL_GROUP_BY 直接報錯原因是: * 表示所有字段都要顯示 但是 分組后 記錄的細節被隱藏 只留下了這意味著:只有出現在group by 后面的字段才能被顯示
聚合函數:
將一堆數據經過計算,得到一個數據
sum() 求和
avg() 求平均數
max()/min() 求最大值 / 最小值
count() 個數
having
用于對分組后的數據進行過濾
having不會單獨出現 都是和group by 一起出現
與where的區別
相同點: 都用于過濾數據
不同點:
1.where是最先執行 用于讀取硬盤數據
having 要等到數據讀取完之后 才能進過濾 比where晚執行
2.where中不能使用聚合函數
having中可以
order by [desc,asc]
用于對記錄進行 排序
desc為降序
asc為升序
limit
用于限制顯示的條數
limit [start,]count
# 看看表里前三條數據
select *from 表名 limit 3;
# 看看表里的3-5條
select * from 表名 limit 2,3;
limit 常用于 數據的分頁展示 比如騰訊新聞 的上拉加載新的而一頁
select *from emp limit 0,10; 第一頁 頁數 減1 乘以條數 得到起始位置
select *from emp limit 10,10; 第2頁
select *from emp limit 20,10; 第3頁
多表查詢的方式
1.笛卡爾積查詢
用坐標中的一條記錄 去鏈接另一張表的所有記錄
就像是把 兩張表的數據做了一個乘法
用 where 篩選出正確的數據
select *from emp,dept where emp.dept_id = dept.id;
on關鍵字
作用 用于多表查詢是 進行條件限制
2.內連接查詢
inner join
select *from emp inner join dept on emp.dept_id = dept.id;
3.左外連接
left join
左邊表中的數據完全顯示 右邊表中的數據匹配上才顯示
select *from emp left join dept on emp.dept_id = dept.id;
4.右外連接
right join
左邊表中的數據匹配上才顯示 右邊表中的數據完全顯示
select *from emp right join dept on emp.dept_id = dept.id;
5. 全外鏈接
full join mysql不支持 oracle支持
可以通過union 間接實現
union 表示合并查詢 意思是把多個查詢結果合并在一起顯示
要求是 被合并的表結構必須相同,默認去除重復
union all合并但是不去除重復
select *from emp right join dept on emp.dept_id = dept.id
union
select *from emp left join dept on emp.dept_id = dept.id;
總結:多表鏈接 在書寫時 按照填空來書寫
如果左邊要全部顯示 用left join
右邊全部顯示 用right join
全部顯示 把左鏈接的結果和右鏈接的結果 合并
當然 也可以更多表一起查 但是 沒有意義 并且你要盡量避免 太多表 一起查
最多三張 在多對多的時候
子查詢
將上一次查詢的結果 作為本次查詢的原始數據(或是查詢條件)
拷貝結構 與數據
create table copy_table select *from customer ;
僅拷貝結構
create table copy_table select *from customer where 0 > 1;
共同點: 索引 描述(自增) 不能以下語法中
記錄的詳細操作
[] 表示可選的
{}表示必選的
增
insert [into] 表名[字段名] value|values(字段值....);
into 可省略
[字段名] 可選
如果寫了 你后面的值 必須與 寫的字段匹配
不寫 后面的值 必須和表的結構完全匹配
value 插入一條記錄
values 插入多條記錄
改
update 表名 set 字段名 = 新的值[,字段n = 新值n] [where 條件]
可以同時修改多個字段 用逗號隔開 注意最后一個字段不能加逗號
where 可選
有就 修改滿足條件的記錄
沒有就全部修改
刪
delete from 表名 [where 條件]
where 可選
有就 刪除滿足條件的記錄
沒有就全部刪除
如果你需要全部刪除 請使用truncate table 表名
delete 是逐行比對 刪除 效率低
delete刪除的行號會保留
查詢
完整的查詢語句
select [distinct] {* | 字段名 | 聚合函數 | 表達式} from 表名
[where 條件
group by 字段名
having 條件
order by 字段名
limit 顯示的條數]
注意: 關鍵字的順序必須與上述語法一致
簡單查詢
1.* 表示所有列 都顯示
2.也可以手動指定要顯示的列 可以是多個
3.distinct 用于去除重復的記錄,只取出完全相同的記錄
4.表達式 支持四則運算
執行順序
def select()
from() 打開文件
where() 讀取每一行并判斷是否滿足條件
group() 對數據進行分組
having() 再分組之后進行過濾 having不單獨出現 僅用于分組之后進行過濾
distinct() 去重
order() 用于對篩選后的數據 進行排序
limit() 限制顯示的條數
最后根據select后制定的字段來顯示數據
where
從硬盤上讀取數據時的一個過濾條件
在沒有索引的情況下 挨個比較 效率低
where 條件不能用于篩選分組后的數據
group by
作用:給數據分組方便統計
按照某一字段給數據分組select *from 表名 group by 字段名
有兩種情況
1.sql_mode中 沒有設置 ONLY_FULL_GROUP_BY 顯示每個組的第一條記錄 沒有意義 所以新版中 自ONLY_FULL_GROUP_BY
2.sql_mode中有設置 ONLY_FULL_GROUP_BY 直接報錯原因是: * 表示所有字段都要顯示 但是 分組后 記錄的細節被隱藏 只留下了這意味著:只有出現在group by 后面的字段才能被顯示
聚合函數:
將一堆數據經過計算,得到一個數據
sum() 求和
avg() 求平均數
max()/min() 求最大值 / 最小值
count() 個數
having
用于對分組后的數據進行過濾
having不會單獨出現 都是和group by 一起出現
與where的區別
相同點: 都用于過濾數據
不同點:
1.where是最先執行 用于讀取硬盤數據
having 要等到數據讀取完之后 才能進過濾 比where晚執行
2.where中不能使用聚合函數
having中可以
order by [desc,asc]
用于對記錄進行 排序
desc為降序
asc為升序
limit
用于限制顯示的條數
limit [start,]count
# 看看表里前三條數據
select *from 表名 limit 3;
# 看看表里的3-5條
select * from 表名 limit 2,3;
limit 常用于 數據的分頁展示 比如騰訊新聞 的上拉加載新的而一頁
select *from emp limit 0,10; 第一頁 頁數 減1 乘以條數 得到起始位置
select *from emp limit 10,10; 第2頁
select *from emp limit 20,10; 第3頁
多表查詢的方式
1.笛卡爾積查詢
用坐標中的一條記錄 去鏈接另一張表的所有記錄
就像是把 兩張表的數據做了一個乘法
用 where 篩選出正確的數據
select *from emp,dept where emp.dept_id = dept.id;
on關鍵字
作用 用于多表查詢是 進行條件限制
2.內連接查詢
inner join
select *from emp inner join dept on emp.dept_id = dept.id;
3.左外連接
left join
左邊表中的數據完全顯示 右邊表中的數據匹配上才顯示
select *from emp left join dept on emp.dept_id = dept.id;
4.右外連接
right join
左邊表中的數據匹配上才顯示 右邊表中的數據完全顯示
select *from emp right join dept on emp.dept_id = dept.id;
5. 全外鏈接
full join mysql不支持 oracle支持
可以通過union 間接實現
union 表示合并查詢 意思是把多個查詢結果合并在一起顯示
要求是 被合并的表結構必須相同,默認去除重復
union all合并但是不去除重復
select *from emp right join dept on emp.dept_id = dept.id
union
select *from emp left join dept on emp.dept_id = dept.id;
總結:多表鏈接 在書寫時 按照填空來書寫
如果左邊要全部顯示 用left join
右邊全部顯示 用right join
全部顯示 把左鏈接的結果和右鏈接的結果 合并
當然 也可以更多表一起查 但是 沒有意義 并且你要盡量避免 太多表 一起查
最多三張 在多對多的時候
子查詢
將上一次查詢的結果 作為本次查詢的原始數據(或是查詢條件)
轉載于:https://www.cnblogs.com/liangchengyang/p/9648522.html
總結
- 上一篇: 找靓机app怎么清灰
- 下一篇: 自己写的py文件中调用django mo