Tải bản đầy đủ (.doc) (12 trang)

Trắc nghiệm SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (67.92 KB, 12 trang )

Trắc nghiệm
SQL
Chương 2: bài tập trang 27-30 (giáo trình CSDL Quan Hệ & SQL)
Câu 8: Câu này rất đơn giản, toàn bộ yêu cầu đều nằm trong bảng GRADE, các bạn chỉ cần dung
lệnh select là xong
Giải:
SELECT *
FROM grade;
Tuy nhiên nếu bạn muốn trông giống như trong sách thì có thể thêm lệnh As (lệnh gán) vào sau
các trường:
SELECT GradeLevel As GRADE, LowestSal As LOSal, HighestSal As HISal
FROM grade;
Câu này dễ nên mình cũng không cần giải thích các bạn cũng đã hiểu.
Câu 9: Câu này là câu cơ bản nhất trong các bài tập liên kết giữa các bảng, các bạn bắt buộc
phải hiểu và làm được câu này thì các câu sau mới có thể làm được
Giải:
SELECT EMPID, LastName, job.JobTitle, ManagerId, HireDay, Salary, CommitionPTC, DeptId
FROM emp INNER JOIN job ON emp.JobId=job.JobId;
Ở trên sách thì lệnh liên kết là lệnh Where … nhưng theo mình thì các bạn nên dùng lệnh
INNER JOIN như trên vì lệnh where là chuẩn 1999 kia, còn lệnh INNER JOIN là chuẩn 2003, nên
mình cũng nên dùng chuẩn mới nhất.
Giải thích: Lệnh INNER JOIN có nghĩa là liên kết tương đương, vì yêu cầu bài tập có trường Job,
nhưng Job chỉ có trong bảng Job. Còn các trường còn lại thì nằm trong bảng EMP, do đó chúng
ta phải liên kết 2 bảng lại bằng lệnh INNER JOIN với điều kiện là emp.JobId=job.JobId, ở trên
lệnh select chúng ta phải thêm tên bảng job vào trước trường JobTitle để chương trình hiểu là
chúng ta lấy trường này từ bảng nào.
Câu 10: Câu này phải thực hiện trong Oracle
Giải: DESC EMP
Câu 12:
Giải:
SELECT LastName, DeptId, Salary


FROM emp
WHERE Salary between 30000 and 80000;
Giải thích: Ở đây yêu cầu đề bài là lấy mức lương từ 1000 đến 2000 (nhưng trong cơ sở dữ liệu
mẫu không có nên chúng ta lấy khác cũng được), do vậy phải dùng lệnh between (lệnh này có
nghĩ là lấy giữa một khoảng nào đó).
Câu 13:
Giải:
SELECT DeptId, DeptName
FROM dept
ORDER BY DeptName;
Giải thích: trong bài này các bạn chỉ cần chú ý đến lệnh Order By là được, lệnh này các bạn đều
đã biết nên mình khỏi giải thích, tuy nhiên các bạn lưu ý là lệnh này luôn đứng cuối cùng. Và nếu
sắp tăng thì dùng lệnh Order By … ASC, xếp giảm thì Order By … DESC.
Câu 14: Chúng ta thay phòng 10 và 20 bằng phòng 50 và 60
Giải:
SELECT EMPID, LastName, job.JobTitle, ManagerId, HireDay, Salary, CommitionPTC, DeptId
FROM emp INNER JOIN job ON emp.JobID=job.JobID
WHERE DeptId in ("50","60")
ORDER BY LastName;
Giải thích: Trong bài này các bạn cần chú ý đến lệnh In, lệnh này tương đương với lệnh Or
( hoặc), trong bài yêu cầu là hiển thị nhân viên là tại phòng 10 và 20, nhưng các bạn cần phải
chú ý không được dùng lệnh And ( có một số bạn bị sai chỗ này) mà phải dùng lệnh In vi mỗi
nhân viên chỉ làm việc tại 1 phòng 50 hoặc 60 mà thôi. Lệnh where (điều kiện) thì các bạn chắc
cũng đã biết, mình không cần phải nói lại (tham khảo trang 20)
Câu 15: Chúng ta thay nghề cleck bằng nghề IT Program
Giải:
SELECT LastName, JobTitle
FROM emp INNER JOIN job ON emp.JobID=job.JobID
WHERE JobTitle="IT Program";
Giải thích: không cần giải thích các bạn cũng đã hiểu.

Câu 16: Chúng ta thay TH bằng ng. Nếu muốn gồm 2 chuỗi kí tự như trong sách thì các bạn chỉ
cần thêm lệnh In hoặc Or cũng được.
Giải:
SELECT *
FROM emp
WHERE LastName like "*ng*";
Giải thích: Ở đây các bạn cần lưu ý là trong sách thì để dùng lệnh like thì dùng kí tự “%” “or” /
để làm kí tự đại diện. Tuy nhiên 2 kí tự trên chỉ dùng được trong HQTCSDL Oracle or SQL mà
thôi, còn trong Access không hỗ trợ nên nếu làm y trong sách không ra thì cũng không phải là
sai đâu.
Câu 17: Chúng ta thay năm 1983 bằng năm 1989
Giải:
SELECT LastName, DeptId, HireDay
FROM emp
WHERE year(HireDay)=1989;
Giải thích: ở đây các bạn cần chú ý đến lệnh year(…), lệnh này sẽ lấy ra năm trong dữ liệu,
tương tự các bạn cũng có thể dùng lệnh day(…) để lấy ra ngày và month(…) để lấy ra tháng.
Câu 18:
Giải:
SELECT LastName, DeptName
FROM emp INNER JOIN dept ON emp.DeptId=dept.DeptId
ORDER BY DeptName;
Giải thích: không có gì khó, các bạn hoàn toàn làm được.
Câu 19:
Giải:
SELECT emp.LastName, dept.DeptName, location.City
FROM (location INNER JOIN dept ON location.LocationId=dept.LocationId) INNER JOIN emp ON
dept.DeptId=emp.DeptId
WHERE salary >50000;
Giải thích: câu này phức tạp hơn so với các câu trên nhưng không khó nếu bạn hiểu được lệnh

liên kết. Để cho dễ nhìn, các bạn mở bảng Relationships lên (Tool/ Relationships).
Như hình trên các bạn thấy là các trường chúng ta cần lấy đó là LocationId của bảng DEPT, City
của bảng LOCATION, Lastname của bảng EMP. Để có thể lấy 3 trường như trên (trường này ứng
với trường kia) thì buộc các bảng trên phải liên kết với nhau. Chúng ta chú ý thấy rằng bảng
LOCATION liên kết với bảng DEPT thông qua trường LocationId, bảng DEPT thì liên kết với bảng
EMP thông qua trường DeptId, tương tự sơ đồ sau (L – D) –E. Nói cho dễ hiểu thì các bạn muốn
lấy dữ liệu từ 2 bảng trở lên thì chỉ cần liên kết chúng với nhau là được, nếu khó hiểu thì các bạn
cần bỏ chút thời gian ra suy nghĩ.
Câu 20:
Giải:
SELECT emp.LastName, job.JobTitle, emp.Salary, grade.GradeLevel
FROM grade, emp INNER JOIN job ON emp.JobID = job.JobId
WHERE salary between LowestSal and HighestSal;
Giải thích: các bạn cần chú ý là lương cần phải nằm trong khoản giới hạn cho phép (theo CSDL
mẫu) là dược.
Cau 21:thay điều kiện lương = 3 bằng lương = 6
Giải:
SELECT emp.LastName, job.JobTitle, emp.Salary, grade.GradeLevel
FROM grade, emp INNER JOIN job ON emp.JobID = job.JobId
WHERE salary between LowestSal and HighestSal and GradeLevel = "6";
Giải thích: tương tự câu trên, các bạn nhớ là trong from thì chúng ta ngăn cách giữa các bảng
bằng dấu “,”, còn trong where thì nếu muốn thêm nhiều điều kiện thì chúng ta dùng lệnh “and”.
Câu 22:
Giải:
SELECT LastName, City, Salary
FROM (location INNER JOIN dept ON location.LocationId=dept.LocationId) INNER JOIN emp ON
dept.DeptId=emp.DeptId;
Giải thích: tương tự câu 20 thôi, không có gì khác cả.
Câu 23:
Giải:

SELECT LastName, JobTitle, Salary, DeptName, GradeLevel
FROM grade, (EMP INNER JOIN job ON emp.JobId=job.JobId) INNER JOIN dept ON
emp.DeptId=dept.DeptId
WHERE Salary between LowestSal and HighestSal;
Giải thích: câu này tương tự câu 19 & 20,ta chỉ cần kết hợp chúng lại mà thôi.
Câu 24:
Giải:
SELECT e.EMPID, e.LastName, e.ManagerId, p.LastName
FROM Emp AS e, emp AS p
WHERE (((e.ManagerId)=p.EMPID));
Giải thích: Nói một cách đơn giản như thế này, bạn cần tìm mã nv, tên nv, mã người quản lý và
tên người quản lý. Các bạn hay mở trang 26 ra và đọc ví dụ, như thế ta phải chia bảng emp
thành 2 bảng khác nhau và lấy dữ liệu trên 2 bảng đó. Như thê thì 3 trường đầu tiên sẽ được lấy
từ bảng emp As e (nên ta đặt e. trước 3 trường đầu tiên). Các bạn chú ý, ở đây điều khó nhất
chính là lấy tên người quản lí, như vậy để lấy tên người quản lí thì cần có mã người quản lý (ở
bảng e) bằng mã nhân viên (ở bảng p).
Câu 25:
Giải:
SELECT LastName, JobTitle, Salary, emp.DeptId, DeptName, GradeLevel
FROM grade, (emp INNER JOIN job ON emp.JobID=job.JobID) INNER JOIN dept ON
emp.DeptId=dept.DeptId
WHERE Salary between LowestSal and HighestSal and ((salary = 36720) or (JobTitle = "IT
Program"));
Giải thích: câu này không khó, chỉ hơi rắc rối chút xíu thôi, các bạn đọc kĩ rồi sẽ hiểu
Vậy là kết thúc các bài tập chương 2, các bạn nào không hiểu chỗ nào xin cứ nêu câu hỏi, nếu
mình có thể giúp được thì sẵn sàng trả lời.
Hướng dẫn giải bài tập chương 3:
Câu 5:
Giải:
SELECT emp.DeptId, emp.LastName, (salary+(salary\100)*10) AS PCTSAL

FROM emp;
Giải thích: câu này đơn giản không có gì để nói.
Câu 6:
Giải:
SELECT LastName+" "+"("+JobTitle+")" AS Expr1
FROM emp INNER JOIN job ON emp.JobID=job.JobId;
Giải thích: câu này đơn giản không có gì để nói.
Câu 7: các bạn chú ý là câu này không thực hiện trên Access được mà phải dùng chương trình
SQL hoặc Oracle mới được.
Giải:
SELECT LastName,HireDay,add_month(HireDay,12) As REWIEW

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×