<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      案例詳細說明MySQL數據庫的設計問題

      [摘要]本文主要為大家分享一篇關于MySQL數據庫的設計問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧,希望能幫助到大家。第一題:層級數據庫設計題目描述:現在有10萬條左右的數據,記錄...

      本文主要為大家分享一篇關于MySQL數據庫的設計問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧,希望能幫助到大家。

      第一題:層級數據庫設計

      題目描述:現在有10萬條左右的數據,記錄一個部門的員工。大部門下是層級結構,有許多個子部門。比如,一級部分A,二級部門A’,B’,C’,三級部門A”,B”,C”。試問如何設計數據庫,我們需要統計二級部分A’下的所有人數。
      分析:
      這里用到了一個層級數據庫的設計。

      CREATE TABLE DEPARTMENT(
          DEP_ID INT UNSIGNED AUTO_INCREMENT,
          DEP_NAME VARCHAR(10) NOT NULL,
          PARENT_ID INT,    
          PRIMARY KEY(DEP_ID)
      )CHARSET=utf8;

      數據庫表department
      插入數據

      單個插入
      INSERT INTO DEPARTMENT (DEP_NAME, PARENT_ID)
      VALUES
      ('A',NULL);
      或者批量插入
      INSERT INTO department VALUES(1,'A',NULL),(2,'B',1),(3,'C',1),
              (4,'D',2),(5,'E',2),(6,'F',3),(7,'G',3);
      dep_iddep_nameparent_id
      1ANULL
      2B1
      3C1
      4D2
      5E2
      6F3
      7G3

      插入數據
      顯示層級,這里用到了left join,根據這一級的dep_id,尋找它的parent_id,然后通過左連接進行連接,得到當前部門以及他的父部門。

      select d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3, d4.dep_name as level4
      from department as d1
      left join department as d2 on d2.parent_id = d1.dep_id 
      left join department as d3 on d3.parent_id = d2.dep_id
      left join department as d4 on d4.parent_id = d3.dep_id
      where d1.dep_name='A';

      顯示層級關系
      當存儲好了部門的層級信息后,我們就開始設計一個部門人員的表。
      創建表,并存儲部門人員的信息

      create table people(
          id INT UNSIGNED AUTO_INCREMENT,
          name varchar(10) not null,
          dep_id INT UNSIGNED,
          departname varchar(10),   
          FOREIGN KEY (dep_id) REFERENCES department(dep_id),    
          primary key(id)
          )charset=utf8;

      數據庫表people
      插入相關的測試數據。

      INSERT INTO people VALUES(1,'hgy',4,'D'),(2,'abc',5,'E'),(3,'def',6,'F'),
              (4,'ddd',2,'B'),(5,'eee',2,'B');

      顯示插入數據
      查找二級部門為B的人,并且列出了他的上級部門信息

      select p.id, p.name, d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3
      from people as p
      left join department as d1 on d1.dep_id = p.dep_id
      left join department as d2 on d2.dep_id  = d1.parent_id
      left join department as d3 on d3.dep_id = d2.parent_id
      where d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';

      顯示二級部門為B的人員信息
      查找二級部門為B的總人數

      select count(*) as total
      from people as p
      left join department as d1 on d1.dep_id = p.dep_id
      left join department as d2 on d2.dep_id  = d1.parent_id
      left join department as d3 on d3.dep_id = d2.parent_id
      where d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
      idnamedepartment_iddepartname
      1hgy4D
      2abc5E
      3def6F
      4ddd2B
      5eee2B

      應該考慮到有的人在二級部門(可能沒有三級部門,沒有四級部門),有的人在一級部門,有的人在四級部門(有一級部門,二級部門,三級部門,四級部門)。
      統計所有的人

      第二題:簡單的統計

      題目描述:現在有一批學生的成績,求四門學科總分大于200的學生,并且按逆序排列。

      CREATE TABLE STUDENT(
          ID INT UNSIGNED AUTO_INCREMENT,
          SCORE1 INT NOT NULL,
          SCORE2 INT NOT NULL,
          SCORE3 INT NOT NULL,
          SCORE4 INT NOT NULL,    
          PRIMARY KEY(ID)
      )CHARSET=utf8;

      數據庫表STUDENT

      INSERT INTO STUDENT VALUES(1,100,98,10,4),(2,100,9,10,4),(3,70,0,180,40),(4,10,98,1,4),(5,30,7,10,4),(6,8,88,1,43);

      查看插入的數據
      根據四門成績的總分進行排序

      SELECT id, score1,score2,score3,score4, score1+score2+score3+score4 as total 
      FROM STUDENTwhere score1+score2+score3+score4 > 200 order by score1+score2+score3+score4 desc;

      4門學科總分大于200
      這里是一個不能直接用別名來排序的知識點,

      以上就是實例詳解MySQL數據庫的設計問題的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清