1. 程式人生 > >Mysql基本語句操作(二)---一對多的實現和關聯語句的用法

Mysql基本語句操作(二)---一對多的實現和關聯語句的用法

二、一對多
※案例的需求: 一個人可以擁有多輛汽車,要求查詢出某人所擁有的所有汽車


資料庫設計
方案一(差的設計)
編號  姓名   性別   年齡   汽車編號    車型   排量   價格
P001  Jack   男     25     C001      BMW    12L    80w
P001  Jack   男     25     C002      Benz   12L    100w
P001  Jack   男     25     C003      Benz   12L    100w
P002  Tom    男     26     C004      BMW    12L    80w
P002  Tom    男     26     C005      Benz   10L    60w
P003  Rose   女     24     C006      Adio   10L    70w

方案二(好的設計)
1)把"一方"單獨建表
編號  姓名   性別   年齡 ...
P001  Jack   男     25  ...
P002  Tom    男     26  ...
P003  Rose   女     24  ...
P004  Mike   男     24  ...

2)把"多方"也建個表(要依賴"一方": 通過外來鍵(補一個欄位) )
外來鍵:位於依賴的那個表,它是被依賴那個表是的主鍵

汽車編號    車型   排量   價格   車主
C001      BMW    12L    80w    P001
C002      Benz   12L    100w   P001
C003      Benz   12L    100w   P001
C004      BMW    12L    80w    P002
C005      Benz   10L    60w    P002
C006      Adio   10L    70w    P003
C007      QQ     8L     6.5w   NULL

3)SQL程式碼實現
create table person2(
  id varchar(32) primary key,
  name varchar(30),
  sex char(1),
  age int
);
insert into person2 values('P1001','小花','0',25);
insert into person2 values('P1002','玉芬','0',24);
insert into person2 values('P1003','Tom','1',25);
insert into person2 values('P1004','Rose','0',23);


create table car(
  id varchar(32) primary key,
  name varchar(30),
  price numeric(10,2),
  pid varchar(32),
  constraint car_fk foreign key(pid) references person2(id)
);
insert into car values('C001','BMW',82.5, 'P1001');
insert into car values('C002','BMW',111.5, 'P1001');
insert into car values('C003','Benz',78.5, 'P1001');
insert into car values('C004','BMW',55.5, 'P1002');
insert into car values('C005','Audio',82.5, 'P1002');
insert into car values('C006','QQ',6.5, 'P1003');
insert into car(id,name,price) values('C007','ABC',6.6);



※關聯(Join):把多個表的資料獲取出來,在記憶體中生成一個新的表
Left Join(左關聯):以左表為主(左表完整。右表中,跟左表有依賴關係的那些記錄加進來,形成新表)
Right Join(右關聯):以右表為主(右表完整。左表中,跟右表有依賴關係的那些記錄加進來,形成新表)
Inner Join(內關聯):兩個表中存在依賴關係的那些記錄抽取出來形成新表

Full Join(全關聯)和 Outter Join(外關聯),MySQL不支援!
4)查詢
//i. 查哪些人有哪些車
舊版: select person2.name, car.name, car.price
        from person2,car  where person2.id= car.pid;


新版(推薦):
select person2.name, car.name, car.price from 
    person2 inner join car on person2.id= car.pid;


//ii. 查詢小花有哪些車
舊版:
select person2.name, car.name, car.price 
  from person2,car where person2.id= car.pid and person2.name ='小花';


新版(推薦):
select person2.name, car.name, car.price from
  person2 inner join car on person2.id = car.pid 
  where person2.name ='小花';


//iii. 查詢哪些人有兩輛及以上的車

過渡1,在car表中查出哪些pid是有兩輛及以上的車:
  SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2;
過渡2,用in子句查詢
SELECT NAME FROM person2 WHERE id IN('p1001'); //in()中寫死了

合併:
SELECT NAME FROM person2 WHERE id IN(
  SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2
); 


//iv. 查詢哪些人沒有車
SELECT NAME FROM person2 WHERE id not IN(
  SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=1
); 


新版(用左關聯):


SELECT person2.name FROM person2 
      LEFT JOIN car ON person2.id = car.pid
      WHERE car.pid IS NULL; 


新版(用右關聯):  
SELECT person2.name FROM car 
      RIGHT JOIN person2 ON person2.id = car.pid

      WHERE car.pid IS NULL; 



相關推薦

Mysql基本語句操作()---一對實現關聯語句用法

二、一對多 ※案例的需求: 一個人可以擁有多輛汽車,要求查詢出某人所擁有的所有汽車 資料庫設計 方案一(差的設計) 編號  姓名   性別   年齡   汽車編號    車型   排量   價格 P001  Jack   男     25     C001      BMW

JDBC上關於資料庫中操作一對關係關係的實現方法--轉

  原文地址---- https://www.cnblogs.com/pangguoming/p/7028322.html 黑馬程式設計師 我們知道,在設計一個Java bean的時候,要把這些BEAN 的資料存放在資料庫中的表結構,然而這些資料庫中的表直接又有些特殊

flask連線mysql資料庫的一對一,一對的處理關係。

Y18    以學生表與班級表為例,進行一對一,與一對多操作說明。 簡單部署: 1、建立flask資料夾,在資料夾中建立python檔案,命名為app,其中程式碼: from flask import Flask app = Flask(__name__) 2

django連線mysql資料庫的一對一,一對關係模型的建立

Y19   介紹如何建立各種關係的資料模型,具體實現各種功能 先配置settings.py中連線mysql資料庫:(Y12有介紹) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.m

Django day08 操作 (四) 一對, 連續跨表查詢

一對多 # 基於雙下劃線的一對多查詢 # 查詢出版社為上海出版社的所有圖書 # ret = Publish.objects.filter(name='上海出版社').values('book__name', 'book__price') # print(ret)

Mysql基本操作(DDL,DML,DCL,DQL)總結

DDL(定義語言的操作): 1,修改表名:alter table 表名 rename 新表名; 2,新增表內欄位:alter table 表名 add( 列名 列型別); 3,刪除表內欄位:alter table 表名 drop 列名; 4, 修改列型別:alter table 表名 mod

JAVA資料庫操作個數據庫操作+Spring data + jpa)

本文我們將主要實現同時操作兩個資料庫,(oracle 和mysql) 當然為了展示技巧,本文將以java配置為主 首先是daoContext.xml的內容 <?xml version="1.0" encoding="UTF-8"?> <beans xml

mysql簡單介紹一對一,一對關係處理辦法

一對一關係示例:一個學生對應一個學生檔案材料,或者每個人都有唯一的身份證編號。 一對多關係示例:一個學生只屬於一個班,但是一個學院有多名學生。 多對多關係示例:一個學生可以選擇多門課,一門課也有多名學生。 這三種關係在資料庫中邏輯結構處理分析: 1.一對多關係處理: 我

對於mysql處理資料庫表中一對的資料統計問題

今天遇到一個問題,就是要統計一個數據庫表中的相同欄位的條數的問題。 SELECT conferenceId, COUNT(*) as num FROM meet_conference_attendee  where conferenceId in (100740609,10

Mac OS mysql 基本操作

由於本人不是專門的後臺開發人員mysql純屬是自己學習玩耍,  簡單的入門操作. 大神可以直接飄過.   1、資料庫(database)管理1.1 create 建立資料庫1.2 show 檢視所有資料庫1.3 alter 修改資料庫1.4 use 使用資料庫1.5 檢視當前

MySQL 表的一對一、一對問題

母親 其中 不用 年齡 就會 性別 應該 表的設計 nbsp 將實體與實體的關系,反應到最終數據庫表的設計上,將關系分為三種:一對一,一對多(多對一)和多對多,所有的關系都是表與表之間的關系; 一對一 一對一:一張表的一條記錄只能與另外一條記錄進行對應,反之亦然學

Mybatis的一對(collection)一對一(association)查詢

del 建表 def mapping p s 新的 ron 語句塊 user 1、mybatis支持映射復雜的查詢結果集 2、表之間的關系 3、實體及其對應關系: @Data @EqualsAndHashCode(callSuper = false) public c

mybatis 一對一與一對collectionassociation的使用

entity tro select art toolbar 一對一 重復 batis map 在mybatis如何進行一對一、一對多的多表查詢呢?這裏用一個簡單的例子說明。 一、一對一 1、association association通常用來映射一對一的關系,例如

深入Mysql鎖機制()讀鎖寫鎖

深入Mysql鎖機制(二)讀鎖和寫鎖 這篇文章主要來介紹一下MySQL資料庫中的表級鎖。 本文提到的讀鎖和寫鎖都是MySQL資料庫的MyISAM引擎支援的表鎖的。而對於行級鎖的共享讀鎖和互斥寫鎖請閱讀MySQL中的共享鎖與排他鎖。我習慣在描述表鎖的時候按照讀寫來區分,在表

Spark的Dataset操作()-過濾的filterwhere

scala> val df = spark.createDataset(Seq(   ("aaa",1,2),("bbb",3,4),("ccc",3,5),("bbb",4, 6))   ).toDF("key1","key2","key3") df: org.apa

一對雙向自關聯查詢

以樹形選單欄例來講解Hibernate的中一對多雙向自關聯,實體類如下: package com.zking.five.entity; import java.util.ArrayList; import java.util.HashSet; import j

一對的自關聯的級聯

一:許可權選單載入的兩種方式  1:一次性將資料表中的資料庫全部載入往瀏覽器返回(選單資料比較少) 2:選單表資料量比較大,當出現瀏覽器卡頓的情況,那麼就採用選單逐級載入 案例:選單物件的一對多雙向自關聯    <!-- select * from t_menu

java的orm框架 mybatis 一對關係的關聯對映查詢--簡單易懂,理解才是王道

mybatis作為輕量級orm框架,需要配置很多sql 語句,sql是比較好控制的,所以都比較喜歡,而一般其他的orm都要學一大堆各種古怪配置,概念,看完文件仍是不明所以。 mybatis的整個流程處理來看,主要有【三方面】 1、sql語句查詢後的結果集,簡

決策樹基本理論學習以及Python程式碼實現詳細註釋

首先是樹的概念我們都比較熟悉了,然後決策樹其實就是一棵樹,通過在每一個幾點通過特徵的不同,走向不同的子樹直到走到葉子節點找到分類的標籤,算是完成了分類的過程。分類的過程不難理解,主要的是資料構造過程。 首先是構造的依據是什麼呢,以什麼依據作為特徵使用的選擇條件

mysql 分組、 操作查詢結果case when then else end用法舉例

Case具有兩種格式。簡單Case函式和Case搜尋函式。  --簡單Case函式  CASE sex           WHEN '1' THEN '男'           WHEN '2' THEN '女'  ELSE '其他' END  --Case搜尋函式