1. 程式人生 > >mysql記錄的增刪改和單表查詢

mysql記錄的增刪改和單表查詢

重建 隱藏 sql_mode 則表達式 del 新建 手動 float 大於等於

1.記錄的詳細增加方式

insert into 表名[(字段1,字段2,~)] values (值1,值2,~), (值1,值2,~)

  into可以省略。表名後的字段可選

  如果寫了表名後的字段名,後面values 中必須與表名的字段一一對應。

  如果沒有寫,後面的values中的值必須與表的所有字段一一對應。

  values後面可以給多組值,用逗號隔開。

2.記錄的詳細刪除方式

delete from 表名 [where 條件]

條件不寫,是刪除所有記錄這種刪除是一行一行的刪除,註意自增id不會歸零

truncate 重建 先記錄表結構,刪除整個表再新建出表自增id會歸零。

3.更新數據的詳細方式

update 表名 set 字段名 = 值[,字段2 = 值2],[where 條件]

可以一次性修改多個字段的值逗號隔開

條件如果不寫,修改所有記錄。

4.單表查詢

不帶關鍵字的查詢

  select {1.*|2.字段名|3.四則運行|4.聚合函數} from 表名 [where 條件]

1.*表示查詢所有字段

2.可以手動要查字段

3.字段的值可以進行加減乘除

4.聚合函數,用於統計

where 是可選的

concat() 是字符串拼接函數。

as 起別名

完整的查詢語句語法。

select [distinct] * from 表名
[where
group by
having
order by
limit
]

關鍵字的執行順序

from 打開文件

where 讀取文件並過濾

group by 對已讀取的數據進行分組

having 對分組的數據進行過濾

distinct 去重數據

order by 排序

limit  獲取指定條數

where 關鍵字的用法

create table stu(id int primary key auto_increment,name
char(10),math float,english float);
insert into stu values(null,"趙雲",90,30);
insert into stu values(null,"小喬",90,60);
insert
into stu values(null,"小喬",90,60); insert into stu values(null,"大喬",10,70); insert into stu values(null,"李清照",100,100); insert into stu values(null,"鐵拐李",20,55); insert into stu values(null,"小李子",20,55);

查看所有數據

select * from stu

查看 英語成績

 select english from stu;

查看所有?人的數學成績 並去除項姓名相同的數據

select distinct name,math from stu;

統計每個人的總分

select name,math+english as 總分 from stu;

為每個為的英語加10分顯示

select name,english+10 from stu;

需要 在字段的數據前加上字段名:

name:趙雲 english:90 math:30

select concat("name:",name,"english:",english,"math:",math) from stu;

需求 如果 總分?小於150 在名字後?面加上shit ?大於等於 加上nice

mysql> select(
    -> case
    -> when english+math>120 then
    -> concat(name,"nice")
    -> when english+math<120 then
    -> concat(name,"shit")
    -> end),
    -> english,math from stu;

where關鍵字支持的表達式

技術分享圖片

1.查詢英語分數在 80-100之間的同學。

select * from stu where english between 80 and 100;

2.查詢數學分數為89,90,91的同學

select * from stu where english in (80,90,91);

3.查詢所有姓李的學?生成績。

 select * from stu where name like "李%";

4.查詢所有姓名帶有李的學?生成績

select * from stu where name like "%%";

5.查詢數學分>80並且英語分>80的同學

select * from stu where math>80 and english >80;

查詢數學分<60並且英語分<60的同學。

select * from stu where math<60 and english <60;

where 是如何找到你要的數據的?

where語句句條件在沒有索引的情況下 是挨個遍歷判斷 效率?非常低
如果有索引 則可以忽略略掉?大多數?無?用數據

關鍵字 group by

什麽是分組

  把一個整體 分割為多個部分

為什麽分組

  在數據庫中分組為了統計

分組後 組裏的詳細記錄就被隱藏起來了 不能直接查看 dept 一分組 變成三條記錄 每個組中卻包含多條記錄 沒辦法顯示。
一定要顯示的話 可以使用group_concat(字段名) 可以將多個值拼接成一個字符串。

註意

  1.只有出現在group by 後面的字段 才可以被顯示 其他都被影藏了

  2.聚合函數不能寫在where的後面 where最先執行 它的作用硬盤讀取數據並過濾 以為數據還沒有讀取完 此時不能進行統計。

什麽樣的字段適合用於分組

   重復性高的字段

了解:

  在mysql 5.6中 分組後會默認顯示 每組的第一條記錄 這是沒有意義的

  5.7不顯示 因為5.7中 sql_mode中自帶 ONLY_FULL_GROUP_BY
  group by 後面可以有多個分組與依據 會按照順序執行

create table emp (id int,name char(10),sex char,dept char(10),job
char(10),salary double);

insert into emp values
(1,"劉備","男","市場","總監",5800),
(2,"張飛","男","市場","員工",3000),
(3,"關羽","男","市場","員工",4000),
(4,"孫權","男","行政","總監",6000),
(5,"周瑜","男","行政","員工",5000),
(6,"小喬","女","行政","員工",4000),
(7,"曹操","男","財務","總監",10000),
(8,"司馬懿","男","財務","員工",6000);

1.將數據按照部?門分組

select dept from emp group by dept;

何為聚合函數?
將多個數據進行計算 並得到?一個結果 稱為聚合
有哪些集合函數?
  sum
  count
  avg
  max/min
簡單測試

2.查詢每個部門有幾個人

select dept ,count(*) from emp group by dept;

3.計算每個部門的平均?工資

select dept,avg(salary) from emp group by dept;

4.計算每個崗位的平均?工資

 select job,avg(salary) from emp group by job;

5.計算每個部?門每個崗位的平均?工資

select dept,job,avg(salary) from emp group by dept,job;

6.查詢平均?工資?大於5000的部?門

select dept,avg(salary) from emp group by dept having avg(salary)>5000;

order by 排序用的

  asc 表示升序 是默認的
  desc 表示降序
  by 後面可以有多個排序依據

limit 限制顯示條數

  limit a,b
  limit 1,5
  從1開始 到5結束 錯誤
  從1開始 不包含1 取5條

  分頁查詢
每頁顯示3條 共有10條數據
  if 10 % 3 == 0:
    10 / 3
  else:
    10/3 +1
總頁數4

第一頁
select *from emp limit(0,3)
第二頁
select *from emp limit(3,3)
第二頁
select *from emp limit(6,3)

起始位置的算法
頁數 - 1 * 條數
1 - 1 = 0 * 3 = 0
2 - 1 = 1 * 3 = 3

查看前三?人

select * from emp limit 0,3;

查看工資最高的那個人信息

 select * from emp order by salary desc limit 0,1;

查看id為3-6的?人

select * from emp limit 3,3;

三 正則表達式匹配
正則表達式?用於模糊查詢,模糊查詢已
經講過了了
like 僅?支持 % 和 _ 遠沒有正則表達式靈

當然絕?大多數情況下 like足夠使用

select * from 表名 where 字段名 regexp "正則表達式”;

mysql記錄的增刪改和單表查詢