日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据WEB阶段(六)MySql详解(二)

發布時間:2024/4/30 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据WEB阶段(六)MySql详解(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySql詳解(二)

一、分組查詢

  • 語法:

    select col_name1,col_name2... from tb_name group by having ...;
  • 練習:

    執行下面的SQL,創建orders表并插入數據create table orders(id int,product varchar(20),price float);insert into orders(id,product,price) values(1,'小米手機',900);insert into orders(id,product,price) values(2,'奧妙洗衣液',60);insert into orders(id,product,price) values(3,'樂視TV',90);insert into orders(id,product,price) values(4,'聯想鍵盤',80);insert into orders(id,product,price) values(5,'奧妙洗衣液',60);insert into orders(id,product,price) values(6,'小米手機',900);~對訂單表中商品歸類后,顯示每一類商品的總價select * from orders group by product;select count(*) from orders group by product;select sum(price) from orders group by product;~查詢購買了幾類商品,并且每類總價大于100的商品select product,sum(price) 總價 from orders group by product having sum(price)>100;~查詢單價小于100而總價大于100的商品的名稱. select * from orders where price<100 group by product having sum(price) > 100;
  • where和having的區別
  • where和having子句都可以進行過濾 , 但是使用場景有所不同 。
  • where對分組之前的數據進行過濾,不能使用聚合函數和別名
  • having子句對分組之后的數據進行過濾 , 可以使用聚合函數和別名 。
  • 使用where子句的地方一般都可以用having代替 , 但是使用having的地方一般不能使用where代替。
  • 二、數據庫備份與恢復

  • 備份數據庫
  • 注意在新開的cmd窗口中 , 不要登錄mysql
  • 備份命令: mysqldump -u用戶名 -p >備份數據存放位置
  • 恢復數據
  • 方式一: 在cmd中(不登錄mysql)
  • 恢復命令: mysql -u用戶名 -p <數據存放位置
  • 方式二: 在mysql客戶端中
  • 恢復命令: source 數據存放位置
  • 三、外鍵約束

  • 外鍵:唯一標識其他表中的一條記錄,用來通知數據庫兩張表字段之間的對應關系, 并讓數據庫幫我們維護這樣關系的鍵就叫做外鍵
  • 外鍵的作用: 確保數據庫數據的完整性和一致性
  • 添加外鍵:foreign key(外鍵) reference 其他表(關聯的鍵)
  • 案例:

    create table dept(id int primary key auto_increment,name varchar(20));insert into dept values(null, '財務部');insert into dept values(null, '人事部');insert into dept values(null, '科技部');insert into dept values(null, '銷售部');create table emp(id int primary key auto_increment,name varchar(20),dept_id int,foreign key(dept_id) references dept(id));insert into emp values(null, '張三', 1);insert into emp values(null, '李四', 2);insert into emp values(null, '老王', 3);insert into emp values(null, '趙四', 4);insert into emp values(null, '劉能', 4);要求: (1)執行上面的SQL語句,創建兩張表(dept和emp),在創建時先不指定dept_id為外鍵,嘗試刪除部門表中的某一個部門。 (2)將dept和emp表刪除重建,在創建時指定dept_id為外鍵,再次嘗試刪除部門表中的某一個部門。
  • 四、多表設計

  • 1 - *(一對多):在多的一方添加列保存一的一方的主鍵來作為外鍵, 來保存兩張表之間的關系
  • 1 - 1(一對一):在任意一方添加列保存另一方的主鍵作為外鍵, 來保存兩張表之間的關系
      • *(多對多):在一張第三方的表中分別保存兩張表的主鍵作為外鍵, 來保存兩張表之間的關系,可以把多對多的關系拆分成兩個一對多的關系來理解
  • 五、多表查詢

  • 案例:

    create table dept(id int primary key auto_increment,name varchar(20));insert into dept values(null, '財務部');insert into dept values(null, '人事部');insert into dept values(null, '科技部');insert into dept values(null, '銷售部');create table emp(id int primary key auto_increment,name varchar(20),dept_id int);insert into emp values(null, '張三', 1);insert into emp values(null, '李四', 2);insert into emp values(null, '老王', 3);insert into emp values(null, '劉能', 5);需求1:查詢出部門表和員工表,同時列出部門信息和員工信息。select * from dept,emp;(笛卡爾積查詢)select * from dept, emp where emp.dept_id=dept.id;或者select * from dept inner join emp on emp.dept_id=dept.id; 需求2:查詢出部門信息和部門所對應的員工信息,同時列出那些沒有員工的部門select * from dept left join emp on emp.dept_id=dept.id; 需求3:查詢出部門信息和部門所對應的員工信息,同時列出那些沒有部門的員工select * from dept right join emp on emp.dept_id=dept.id; 需求4:查詢出部門信息和部門所對應的員工信息, 同時列出沒有員工的部門和那些沒有部門的員工select * from dept full join emp on emp.dept_id=dept.id;###mysql不支持
  • 笛卡爾積查詢

  • 兩張表相乘得出來的結果。如果左邊表有m條記錄,右邊有n條記錄,則查詢出來的結果就是m*n條。這些查詢結果中包含大量錯誤的結果,通常不會使用這種查詢。
  • 內連接查詢:查詢出左邊表(dept)有且右邊表(emp)也有的記錄。

    select * from emp inner join dept on dept.id=dept_id;
  • 左外連接查詢:在內連接查詢的基礎上,加上左邊表有而右邊表沒有的記錄

  • **查詢出部門所對應的員工信息, 同時列出那些沒有員工的部門

    select * from dept left join emp on dept.id=dept_id;
  • 右外連接查詢:在內連接查詢的基礎上,加上右邊表有而左邊表沒有的記錄。

  • **查詢出部門所對應的員工信息, 同時列出那些沒有部門的員工

    select * from dept right join emp on dept.id=dept_id;
  • 全外連接查詢:在內連接查詢的基礎上,加上左邊表有而右邊表沒有的記錄 和 右邊表有而左邊表沒有的記錄。

  • **查詢出部門所對應的員工信息,同時列出那些沒有員工的部門及些沒有部門的員工

    select * from dept full join emp on dept.id=dept_id;###mysql不支持全外連接查詢
  • 使用union模擬全外連接查詢:

    select * from dept left join emp on dept.id=dept_id union select * from dept right join emp on dept.id=dept_id;
  • 總結

    以上是生活随笔為你收集整理的大数据WEB阶段(六)MySql详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。