查看完整版本: 關於SQL語法 高手請進!~
頁: [1]

編號ㄚ弦 發表於 2010-6-15 06:41 PM

關於SQL語法 高手請進!~

我有以下要匯進資料庫的資料
CREATE TABLE course (

course_id smallint NOT NULL,

course_name varchar(20) NOT NULL,

course_cat varchar(20),

CONSTRAINT course_PK PRIMARY KEY (course_id));

CREATE TABLE dept (

dept_id smallint NOT NULL,

dept_name varchar(20) NOT NULL,

manager_id int,

CONSTRAINT dept_id_PK PRIMARY KEY (dept_id));

CREATE TABLE emp (

emp_id int NOT NULL,

emp_name varchar(20) NOT NULL,

emp_gender varchar(1),

emp_pos varchar(20),

dept_id smallint,

salary int,

CONSTRAINT emp_PK PRIMARY KEY (emp_id),

CONSTRAINT emp_dept_FK FOREIGN KEY (dept_id) REFERENCES dept(dept_id));

CREATE TABLE enroll (

enroll_id int NOT NULL,

emp_id int NOT NULL,

course_id smallint NOT NULL,

score int,

CONSTRAINT enroll_PK PRIMARY KEY (enroll_id),

CONSTRAINT enroll_emp_FK FOREIGN KEY (emp_id) REFERENCES emp(emp_id),

CONSTRAINT enroll_course_FK FOREIGN KEY (course_id) REFERENCES course(course_id));


INSERT INTO course VALUES (110,'時間管理','個人成長');
INSERT INTO course VALUES (210,'專案管理','商業經營');
INSERT INTO course VALUES (220,'策略管理','商業經營');
INSERT INTO course VALUES (230,'行銷管理','商業經營');
INSERT INTO course VALUES (120,'情緒管理','個人成長');
INSERT INTO course VALUES (310,'日文初階','語言學習');
INSERT INTO course VALUES (320,'英文會話','語言學習');
INSERT INTO course VALUES (330,'英文文法','語言學習');


INSERT INTO dept VALUES (111, '市場', 1001);
INSERT INTO dept VALUES (222, '製造', 1005);
INSERT INTO dept VALUES (333, '會計', 1003);
INSERT INTO dept VALUES (444, '研發', 1009);
INSERT INTO dept VALUES (555, '人事', 1002);


INSERT INTO emp VALUES (1001,'羅大明',  'M', '經理', 111, 45000);
INSERT INTO emp VALUES (1002,'李商隱', 'M', '經理', 555, 35000);
INSERT INTO emp VALUES (1003,'王珍妮', 'F', '經理', 333, 40000);
INSERT INTO emp VALUES (1004,'沈落燕',  'F', '雇員', 111, 20000);
INSERT INTO emp VALUES (1005,'章自強',  'M', '經理', 222, 43000);
INSERT INTO emp VALUES (1006,'花千樹', 'M', '雇員', 222, 20000);
INSERT INTO emp VALUES (1007,'趙碧雲', 'M', '雇員', 333, 20000);
INSERT INTO emp VALUES (1008,'李志明', 'M', '技師', 444, 30000);
INSERT INTO emp VALUES (1009,'陳玲玲', 'F', '經理', 444, 48000);
INSERT INTO emp VALUES (1010,'夏春雨', 'F', '雇員', 222, 22000);
INSERT INTO emp VALUES (1011,'陳秋月', 'F', '雇員', 555, 21000);
INSERT INTO emp VALUES (1012,'陳春嬌', 'F', '技師', 222, 31000);
INSERT INTO emp VALUES (1013,'李志豪', 'M', '技師', 444, 30000);
INSERT INTO emp VALUES (1014,'李中正', 'M', '技師', 222, 32000);


INSERT INTO enroll VALUES (1, 1010, 120, 90);
INSERT INTO enroll VALUES (2, 1009, 120, 95);
INSERT INTO enroll VALUES (3, 1010, 220, 85);
INSERT INTO enroll VALUES (4, 1011, 120, 92);
INSERT INTO enroll VALUES (5, 1005, 230, 88);
INSERT INTO enroll VALUES (6, 1006, 120, 90);
INSERT INTO enroll VALUES (7, 1010, 230, 80);
INSERT INTO enroll VALUES (8, 1009, 310, 85);
INSERT INTO enroll VALUES (9, 1010, 220, 85);
INSERT INTO enroll VALUES (10, 1001, 120, 92);
INSERT INTO enroll VALUES (11, 1005, 330, 96);
INSERT INTO enroll VALUES (12, 1011, 320, 91);
INSERT INTO enroll VALUES (13, 1001, 110, 85);
INSERT INTO enroll VALUES (14, 1002, 330, 92);
INSERT INTO enroll VALUES (15, 1002, 230, 85);
INSERT INTO enroll VALUES (16, 1009, 110, 90);



共有4個資料表

分別是DEPT(部門)  EMP(員工)  EMP(員工)  COURSE(訓練課程)


這4個資料表的欄位如下:


DEPT(部門) :     部門代碼      部門名稱      部門經理       DEPT _ID       DEPT_NAME       MANAGER_ID    EMP (員工):     員工代碼      員工姓名      性別      職位      所屬部門      薪水       EMP_ID       EMP_NAME       EMP_GENDER       EMP_POS       DEPT_ID      SALARY ENROLL (修課):     員工代碼      課程代碼      分數       EMP_ID       COURSE_ ID       SCORE    COURSE(訓練課程):     課程代碼      課程名稱      課程種類       COURSE _ID       COURSE _NAME       COURSE_CAT  





現在有兩個問題


1.列出上過訓練課程每位員工的最高得分之課程名稱與分數2.列出與員工代碼1001上過課的員工,列出員工代碼與課程代碼這兩題我不會
請各位救一下謝謝!~...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

編號ㄚ弦 發表於 2010-6-15 09:55 PM

例如

列出全部員工的所有資料(員工資料表的所有欄位)

語法就是:
SELECT *
FROM EMP

編號ㄚ弦 發表於 2010-6-15 09:56 PM

例如

列出全部員工的所有資料(員工資料表的所有欄位)

語法就是:
SELECT *
FROM EMP

jo641215 發表於 2010-8-20 06:08 PM

本帖最後由 jo641215 於 2010-8-20 10:37 PM 編輯

--1.列出上過訓練課程每位員工的最高得分之課程名稱與分數

select B.* from (
select a.emp_name,max(b.score) as 分數
from emp a inner join enroll b
on b.emp_id=a.emp_id
group by a.emp_name,b.emp_id
) A
inner join
(
select a.emp_name,max(b.score) as 分數,c.course_name
from emp a inner join enroll b
on b.emp_id=a.emp_id
inner join course c
on b.course_id = c.course_id
group by a.emp_name,b.emp_id,c.course_name
) B
ON A.分數=B.分數 and A.emp_name=B.emp_name
GROUP BY B.course_name,B.emp_name,B.分數

--2.列出與員工代碼1001上過課的員工,列出員工代碼與課程代碼

select a.emp_name,a.emp_id,b.course_id
from emp a inner join enroll b
on a.emp_id=b.emp_id where b.course_id in(
select b.course_id
from enroll a inner join course b
on a.course_id =b.course_id where  a.emp_id='1001'
)
group by a.emp_name,a.emp_id,b.course_id
order by emp_name...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

henryangel88 發表於 2010-8-23 04:36 PM

感謝大大分享不錯的東西
試用.........<br><br><br><br><br><div></div>

lucidlts 發表於 2010-9-13 05:42 AM

你應該現已自己的能力嘗試寫出自己SQL Statement后才發上來讓大家替你修改。要別人替你做功課是不對了。。。

lucidlts 發表於 2010-9-13 05:42 AM

你應該現已自己的能力嘗試寫出自己SQL Statement后才發上來讓大家替你修改。要別人替你做功課是不對了。。。

墮落元素 發表於 2010-9-16 01:27 PM

提供好用的SQL語法給你!!!功課的話...可以自己想
Select Attribute-list and Function-list
From Table-list
[where Condition]
[group by Attribute-List]
[Having Grouping Condition]
[Order By Attribute-List]
頁: [1]