SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
ANHMATTROI – TIN5A
1
Cơ sở dữ liệu T-SQL
1. Các kiểu dữ liệu
- Các kiểu dữ liệu thường dùng:
+ Kiểu số:
Số nguyên: tinyint(8bit), smallint(16bit), int(32bit), bigint(64bit)
Số thực: float(32-64bit), real(32bit), decimal(5-17B), numberic(5-17B), money(8B)
+ Kiểu chữ: char(n), varchar(n), nchar(n), nvarchar(n), text với n là số kí tự. Kiểu
nchar(n) và nvarchar(n) biểu diễn các kí tự mã Unicode. Kiểu char(n), varchar(n) biểu
diễn các kí tự mã Ascii
Char(n): 1 <= n <= 8000 mỗi kí tự cần 8bit để lưu trữ
Nchar(n): 1 <= n <= 4000 mỗi kí tự cần 16bit để lưu trữ
Varchar(n): 1 <= n <= 8000 mỗi kí tự cần 8bit để lưu trữ
+ Ngày giờ: smalldatetime, datetime(8B), date(3B), time(3-5B)
+ Chuỗi bit: binary, varbinary, image
+ Kiểu logic: bit những số khác 0 là 1 còn 0 vẫ là 0, chỉ có 3 giá trị 0, 1, null
+ Kiểu dữ liệu bảng: table
- Các kiểu dữ liệu khi biểu diễn cần đặt giữa hai dấu nháy đơn: char, nchar, text, datetime,
nchar, nvarvhar.
- Chuyển kiểu dữ liệu: dùng cast(<kiểu dữ liệu cũ> as <kiểu dữ liệu mới>) hoặc dùng
convert(<kiểu dữ liệu mới>, <kiểu dữ liệu cũ>)
Ví dụ: print 17/9
print 17/cast(9 as float)
print 17/9
print 17/convert(float, 9)
- Hiển thị ra màn hình: trong sql có hai tab hiện thị
ANHMATTROI – TIN5A
2
+ Tab results: hiện thị kết quả của câu lệnh truy vấn
VD: declare @x int = 9
select @x as N'Giá trị của x là'
+ Tab messages: hiển thị chuỗi kí tự hoặc số bằng câu lệnh print <chuỗi kí tự hoặc một
số>, chuỗi kí tự đặt giữa hai dấu nháy đơn ‘<đặt chuỗi kí tự ở đây>’. Nếu chuỗi kí tự
có mã unicode thì thêm kí tự N đằng trước hai dấu nháy đơn N’ … ‘
VD: print 'sql server'
print N'Cơ sở dữ liệu'
print 6.78
print 5+6
- Chú thích: dòng chú thích không được biên dịch, nó chỉ để cho dễ hiểu đoạn chương
trình này ta đang làm gì. Có hai cách chú thích:
+ C1: dùng hai dấu gạch ngang viết liền -- <dòng chú thích> cách này chỉ có tác dụng
trên một dòng
+ C2: dùng /* đây là dòng
chú thích */
cách này có tác dụng trên nhiều dòng
- Trong sql không phân biệt chữ in hoa hay chữ thường
2. Các phép toán
- Các phép tính
+ Cộng hai số hoặc nối hai chuỗi
- Trừ hai số
* Nhân hai số
/
Chia hai số, nếu cả hai số có kiểu số nguyên
thì kết quả là chia lấy phần nguyên
%
Chia lấy phần dư: điều kiện hai số có kiểu
nguyên
ANHMATTROI – TIN5A
3
Ví dụ:
print N'Cơ sở dữ liệu' + 'T-SQL'
print 2+3
print 8-13
print 3%2
print 4*5
print 8/5
print 8.0/5
- Các phép logic
and or
1 1 1 1
1 0 0 1
0 0 0 0
0 1 0 1
not
0 1
1 0
- Các phép so sánh
= Phép so sánh bằng
> Lớn hơn
< Nhỏ hơn
<> Khác
!= khác
>= Lớn hơn hặc bằng
ANHMATTROI – TIN5A
4
<= Nhỏ hơn hoặc bằng
!< Không nhỏ hơn
!> Không lớn hơn
3. Các lệnh làm việc với cơ sở dữ liệu và bảng
a. Cơ sở dữ liệu
- Tạo cơ sở dữ liệu:
use master
create database <tên cơ sở dữ liệu> on
(
name = '<tên file>',
filename = '<đường dẫn tới thư lưu file<tên file ở trên>.mdf',
sixe = <kích thước mặc định đơn vị là MB>,
maxsize = <kich thước tối đa>,
filegrowth = <độ phình>
)
log on
(
name = '<tên file>',
filename = '<đường dẫn tới thư mục lưu file<tên file ở trên>.ldf',
size = <kích thước mặc định đơn vị là MB>,
maxsize = <kích thước tối đa>,
filegrowth = <độ phình>
)
+ Tên cơ sở dữ liệu không có dấu cách, không chứa các kí tự đặc biệt, không bắt đầu
bằng kí tự số,...
+ Độ phình: khi kích thước của file lớn hơn kích thước mặc định thì size = size + độ
phình(đơn vị là mb hoặc %) sao cho không lớn hơn maxsize
Ví dụ: tạo cơ sở dữ liệu quản lí sinh viên
use master
create database QLSV on
(
name = 'Quanlysinhvien',
filename = 'C:Bai tapQuanlysinvien.mdf',
size = 10mb,
ANHMATTROI – TIN5A
5
maxsize = 30mb,
filegrowth = 5%
)
log on
(
name = 'Quanlysinhvien_log',
filename = 'C:Bai tapQuanlysinvien_log.ldf',
size = 5mb,
maxsize = 20mb,
filegrowth = 5%
)
- Xóa cơ sở dữ liệu:
drop database <tên cơ sở dữ liệu>
Ví dụ: xóa cơ sở dữ liệu quản lí sinh viên
use master
drop database QLSV
- Đổi tên cơ sở dữ liệu:
alter database <tên cơ sở dữ liệu cũ> modify name = <tên mới>
Ví dụ: đổi tên cơ sở dữ liệu quản lí sinh viên
use QLSV
alter database QLSV modify name = QuanLiSinhVien
- Đổi kích thước:
alter database <tên cơ sở dữ liệu> modify size = <mấy mb>
- Thay đổi thuộc tính của cơ sở dữ liệu:
exec sp_dbop <tên cơ sở dư liệu> , 'read only' , 'true/false'
b. Bảng
- Tạo bảng:
use <tên cơ sơ dư liệu>
create table <tên bảng>
ANHMATTROI – TIN5A
6
(
<tên cột> <kiêu dữ liệu> not null (có hoặc không mặc định là
null),
.................................................
)
+ Tên cột không chứa các kí tự đặc biệt, không bắt đầu bằng kí tự số, không có dấu
cách,…
+ Nếu bạn đặt cột có thuộc tính not null lúc chèn dữ - nhập dữ liệu vào bảng bạn phải
điền dữ liệu cho cột này không được không được bỏ qua hay để trống
Ví dụ: tạo bảng sinh viên trong cơ sở dữ liệu quản lí sinh viên có các cột sau: mã sinh
viên có kiểu char, họ và tên sinh viên kiểu nvarchar, ngày sinh kiểu datetime, giới tính
kiểu varchar, quê quán kiểu nvarchar.
use QLSV
create table SinhVien
(
MaSV char(11) not null,
TenSV nvarchar(20),
NgaySinh datetime,
GioiTinh nvarchar(4),
QueQuan nvarchar(30)
)
- Tạo bảng có các thuộc tính như: khóa chính, khóa ngoại, có điều kiện cho cột:
use <tên cơ sở dữ liệu>
create table <tên bảng>
(
<tên cột> <kiểu dữ liệu> constraint <tên ràng buộc khóa chính> primary key,
<tên cột> <kiểu dữ liệu>,
<tên cột> <kiểu dữ liệu> constraint <tên ràng buộc khóa ngoại>
foreign key references <tên bảng chứa cột cần kết nối>(<tên cột>)
.............................
)
Ví dụ: tạo bảng sinh viên có cột mã sinh viên là khóa chính, tên sinh viên trong cơ
sở dữ liệu quản lí sinh viên
use QLSV
ANHMATTROI – TIN5A
7
create table SinhVien
(
MaSV char(10) not null constraint KhoaChinh primary key,
TenSV nvarchar(20)
)
Ví dụ: tạo bảng lớp học có cột mã lớp là khóa chính, tên lớp và cột mã sinh viên là
khóa ngoại tham chiếu đến mã sinh viên ở bảng sinh viên trong cơ sở dữ liệu quản
lí sinh viên
use QLSV
create table LopHoc
(
MaLop char(10) not null primary key,
TenLop varchar(5),
MaSV char(10) not null constraint KhoaNgoai foreign key
references SinhVien(MaSV)
)
+ Các ràng buộc khóa chính và khóa ngoài nếu không có từ khóa constraint tên ràng
buộc khóa chính, khóa ngoại sẽ do trình biên dịch đặt tên.
+ Cột có ràng buộc khóa ngoại khi tham chiếu đến cột của bảng khác thì hai cột này
phải cùng kiểu dữ liệu, cùng kích thước.
+ Nếu trong bảng có từ hai khóa chính trở lên ta có thể dùng constraint <tên khóa
chính> primary key (<tên các cột là khóa chính>) các cột này chỉ khai báo có tên cột
và kiểu dữ liệu ở trên dòng này. Mỗi bảng chỉ có một tên khóa chính.
+ Nếu trong bảng có một cột là khóa chính thì giá trị ở cột này không có giá trị nào bị
trùng nhau. Nếu có từ hai khóa chính thì giá trị ở mỗi hàng phải khác nhau không được
trùng với hàng nào.
+ Tạo bảng có thêm kiểm tra dữ liệu cho cột bằng từ khóa check:
<tên cột> <kiểu dữ liệu> constraint <tên ràng buộc> check(<tên cột> <toán tử điều
kiện >,<,>=,…> <toán hạng>)
+ Đặt giá trị mặc định cho cột:
<tên cột> <kiểu dữ liệu> default <giá trị mặc định>
Khi thành lập giá trị mặc định cho cột lúc chèn dữ liệu vào bảng nếu không chèn
dữ liệu cho cột này thì trình biên dịch tự động gán giá trị mặc định cho cột đó
+ Tự động tăng giá trị cho cột có kiểu dữ liệu số dùng từ khóa identity(a,b):
ANHMATTROI – TIN5A
8
<tên cột> <kiểu dữ liệu> identity(a,b)
Với a là giá trị đầu tiên của cột, b là sau mỗi lần chèn một hàng thành công vào bảng
đó a sẽ bằng: a = a + b. Lúc chèn dữ liệu vào bảng ta không chèn dữ liệu cho cột này
nữa
VD: tạo bảng sinh viên (*)
use QLSV
create table SinhVien
(
MaSV int not null identity(100000,1),
TenSV nvarchar(20),
NgaySinh datetime not null,
Diem float check (Diem>=0 or Diem <=10),
GioiTinh nvarchar(4) default N'Nam',
QueQuan nvarchar(30),
-- giả sử MaSV và NgaySinh là khóa chính
constraint KhoaChinh primary key(MaSV,NgaySinh)
)
- Xóa bảng:
drop table <tên bảng>
+ Nếu đang có cột từ bảng khác tham chiếu đến phải xóa bảng đó trước mới xóa
được bảng này
Ví dụ: xóa bảng sinh viên vừa tạo ở trên
use QLBH
drop table SinhVien
- Thêm cột:
alter table <tên bảng> add <tên cột> <kiểu dữ liệu> not null(có
hoặc không)
Ví dụ: thêm cột tên lớp vào bảng sinh viên
use QLSV
alter table SinhVien add TenLop varchar(10)
- Xóa cột:
ANHMATTROI – TIN5A
9
alter table <tên bảng> drop column <tên cột>
Ví dụ: xóa cột tên lớp trong bảng sinh viên
use QLSV
alter table SinhVien drop column TenLop
- Thay đổi kiểu dữ liệu của cột:
alter table <tên bảng> alter column <tên cột> <kiểu dữ liệu mới> not
null (có hoặc không)
- Đặt hoặc thay đổi khóa chính:
alter table <tên bảng> add constraint <tên ràng buộc> primary
key(<tên cột>)
Chú ý: cột phải có thuộc tính not null mới thêm hoặc thay đổi khóa chính và bảng
hiện tại đang rỗng chưa có hàng nào
- Kết nối hai cột thuộc hai bảng khác nhau:
alter table <tên bảng 1> add constraint <tên ràng buộc> foreign
key(<tên cột thuôc bảng 1>) references <tên bảng 2>(<tên
cột của bảng 2>)
- Đặt giá trị mặc định cho cột:
alter table <tên bảng> add default <giá trị mặc định> for <tên cột>
- Xem đặc tính của bảng:
exec sp_help <tên bảng>
- Chèn dữ liệu vào bảng hay nhập dữ liệu vào từng hàng của bảng:
insert into <tên bảng>(<tên cột 1> , <tên cột 2> , .....)
values(<giá trị 1> , <giá trị 2> , ...........)
+ Chèn dữ liệu cho n hàng thì viết n dòng trên và kiểu dữ liệu chèn vào phải phù hợp
với từng cột
Ví dụ: chền dữ liệu cho bảng sinh viên ở ví dụ (*)
use QLBH
insert into SinhVien(TenSV,NgaySinh,Diem,GioiTinh,QueQuan)
ANHMATTROI – TIN5A
10
values(N'Đoàn Văn Dũng','06/23/1992',9.5,N'Nữ',N'Nam Định')
insert into SinhVien(TenSV,NgaySinh,Diem,GioiTinh,QueQuan)
values(N'Đỗ Thanh Bình','06/3/1993',9.5,N'Nữ',N'Hà Nội')
insert into SinhVien(TenSV,NgaySinh,Diem,GioiTinh,QueQuan)
values(N'Nguyễn Thị Đức','12/15/1993',9.5,N'Nữ',N'Hải Phòng')
- Chèn dữ liệu từ bảng khác vào:
insert into <tên bảng>
select <tên các cột muốn thêm>
from <lấy từ bảng nào>
+ Nếu muốn loại bớt mấy hàng trước khi chèn vào bảng thì thêm where
+ Số cột chọn ở select == số cột bảng chèn vào và phải cùng kiểu dữ liệu
- Lấy các hàng của bảng khác vào bảng: hai bảng có cùng sự phù hợp về kiểu dữ liệu
giữa các cột với nhau:
select <tên các cột các cột>
into <tên bảng cần chèn vào>
from <lấy từ bảng nào>
- Xóa từng hàng một của bảng:
+ Trên một bảng: delete <tên bảng> where <điều kiện>
+ Trên nhiều bảng: delete from <tên bảng 1> from <tên bảng 2> ……
where <điều kiện>
Ví dụ: xóa thông tin sinh viên Đoàn Văn Dũng
delete SinhVien where TenSV = N'Đoàn Văn Dũng'
- Xóa tất cả các hàng trong bảng:
truncate table <tên bảng>
- Sửa đổi thông tin một ô, nhiều ô hoặc cả cột trong bảng:
update <tên bảng>
set <tên cột> = <dữ liệu> (nếu lấy dữ liệu từ một cột thuộc bảng khác ta thêm) from
<cột đó ở bảng nào>
where <điều kiện>
- Ngắt kết nối ràng buộc hai bảng: khi không chèn được dữ liệu vào bảng
alter table <tên bảng> nocheck constraint <tên ràng buộc>
ANHMATTROI – TIN5A
11
Để kết nối lại ràng buộc thay nocheck bằng check
- Xem ràng buộc có được tạo thành công không:
exec sp_helpconstraint <tên bảng>
- Xóa ràng buộc: khóa chính, khóa ngoài:
alter table <tên bảng> drop <tên ràng buộc>
c. Tạo view
- Tạo view:
use <tên cơ sở dữ liệu>
create view <tên view> as
select <tên các cột>
from <từ bảng nào>
- Xem thông tin view:
exec sp_helptext <tên view>
- Sửa view: giống như ở bảng
alter view <tên view> …………………………
- Xóa view:
drop view <tên view>
- Truy vấn:
select <các cột muôn lấy từ view>
from <lấy từ view nào>
where <điều kiện>
d. Nối hai bảng tạo thành bảng mới
select <tên những cột cần nối>
from <những cột đó có từ bảng nào>
join/inner join <nối vào bảng nào>
on <điều kiện kết nối>
ANHMATTROI – TIN5A
12
where <điều kiện>
Ví dụ: ta có hai bảng sau
BangA BangB
Bảng kết quả:
select * from BangA as a
inner join BangB as b
on a.ma = b.ma
select a.ma, a.ten, b.diem from BangA as a
inner join BangB as b
on a.ma = b.ma
ANHMATTROI – TIN5A
13
select a.ma, a.ten, b.diem from BangA as a
inner join BangB as b
on a.ma = b.ma
where a.ma = '1000000001'
4. Một số hàm thông dụng
+ sum(<tên cột có kiểu số>): tổng các số trong cột này
+ avg(<tên cột có kiểu số>): giá trị trung bình
+ count(*): số hàng trong bảng
+ min(<tên cột>): giá trị nhỏ nhất trong cột
+ max(<tên cột>): giá trị lớn nhất
+ getdate(): trả về ngày tháng năm hiện tại
+ year(<giá trị có kiểu ngày tháng>): trả lại năm
+ month(<giá trị có kiểu ngày tháng >): trả lại tháng
+ day(<giá trị có kiểu ngày tháng>): trả lại ngày
+ sysdatetime(): thời gian SQL Server
ANHMATTROI – TIN5A
14
+ concat(‘chuỗi 1’,’chuỗi 2’,…): nối các chuỗi lại với nhau
+ cast(<kiểu dữ liệu cũ> as <kiểu dữ liệu mới>): chuyển kiểu dữ liệu
+ convert(<kiểu dữ liệu mới>, <kiểu dữ liệu cũ>): chuyển kiểu dữ liệu
+ rtrim(<chuỗi>): vất bỏ những khoẳng trắng(dấu cách) ở bên phải chuỗi
+ ltrim(<chuỗi>): ------------------------------------------------------- trái chuỗi
+ left(<chuỗi>,<lấy mấy kí tự tính từ bên trái sang phải>):
+ right(<chuỗi>,<lấy mấy kí tự tính từ phải sang trái>):
+ len(<chuỗi>): hàm trả về số kí tự của chuỗi
+ datalength(<chuỗi>): hàm trả về số kí tự của chuỗi nhân với kích thước của một kí tự(B)
+ charindex(<chuỗi cần tìm>,<tìm ở trong chuỗi nào>,<bắt đầu tìm ở vị trí nào, chỗ này
không có mặc định sẽ là 1>): hàm trả về vị trí của chuỗi con trong chuỗi mẹ
+ substring(<chuỗi gốc>,<vị trí bắt đầu>,<lấy mấy kí tự từ vị trí bắt đầu>): lấy n kí tự trong
chuỗi gốc bắt đầu từ vị trí bắt đầu
+ choose(<chọn kí tự ở vị trí thứ mấy>,<chuỗi gốc>): hàm này chỉ có ở sql server 2012
+ reverse(<chuỗi>): đảo ngược chuỗi
+ upper(<chuỗi>): chuyển chuỗi đó sang kí tự hoa
+ lower(<chuỗi>): chuyển chuỗi sang kí tự thường
+ replace(<chuỗi gốc>,<chuỗi bị thay thế là chuỗi con của chuỗi gốc>,<thay bằng chuỗi
nào>):
+ dateadd(<year/month/week/dayhour/minute/second/…>,<thêm giảm bao nhiêu>,<của
ngày nào>):
+ datediff(<year/month/week/…>,<ngày 1>,<ngày 2>): sự chênh lệnh
+ datename(<year/month/week/…>,<cột có giá trị ngày tháng>): trả lại tên
+ datepart(<year/month/…>,<cột có giá trị ngày tháng>): trả lại năm,tháng,…
+ format( value, format, [culture] ):
+ abs(<giá trị>): trả lại giá trị tuyệt đối
+ power(x,y): xy
ANHMATTROI – TIN5A
15
+ sqrt(x): căn bậc hai của x
+ square(x): x
+ round(<số đem làm tròn>,<làm tròn đén chữ số thứ mấy số dương làm tròn đằng sau dấu
phẩy, số âm làm tròn đằng trước dấu phẩy>):
+ rand(): tạo ra một số ngẫu nhiên từ 0.0 -> 1.0
+ iif(<biểu thức so sánh>,’true’,’false’): nếu đúng trả lại true sai trả lại false
+ coalesce(<cột 1>,<cột 2>,’chuỗi a’): nếu cả hai giá trị ở cả hai cột là null thì trả lại chuỗi
a
+ db_name(): tên cơ sở dữ liệu
+ host_name(): host name
+ current_user(): người dùng hiện tại
+ user_name(): tên người dùng
+ app_name(): tên ứng dụng
+ isnull(<tên cột>,<nếu giá trị ở cột đó là null thì thay bằng giá trị nào>):
5. Câu lệnh truy vấn
a. Khung câu lệnh truy vấn
- Tạo định danh cho cột: <tên cột> as <bí danh cho cột>
VD: MaSV as MaSinhVien hoặc MaSV as N’Mã sinh viên’
- Select <tên các cột ngăn cách nhau bằng dấu phẩy>
+ select * : lấy tất cả các cột
Ví dụ: cho bảng SinhVien gồm các thông tin sinh viên
ANHMATTROI – TIN5A
16
select * from SinhVen được bảng ban đầu
+ select top <lấy mấy hàng từ trên xuống> <tên cột>,……..
select top 3 * from SinhVien
+ select distinct <tên cột>: những giá trị bị trùng trên cột đó chỉ lấy một giá trị
select distinct que from SinhVien
+ select count(*)/avg(<tên cột>)/sum(<tên cột>)/min(<tên cột>)/max(<tên cột>): cột
có kiểu số nguyên hoặc số thực
ANHMATTROI – TIN5A
17
Ví dụ: cho bảng BangDiem sau
select count(*) as N'Số sinh viên' from BangDiem
select round(avg(diem),1) as N'Điểm trung bình'
from BangDiem
select sum(diem) as N'Tổng điểm' from BangDiem
select min(diem) as N'Điểm thấp nhất' from BangDiem
select max(diem) as N'Điểm cao nhất' from BangDiem
ANHMATTROI – TIN5A
18
+ Nếu lấy dữ liệu từ nhiều bảng khác nhau phải xác định rõ cột đó thuộc bảng nào bằng
cách select <tên bảng>.<tên cột>
+ Có thể có thêm khối chọn select nữa ở khối chọn select ngoài, kết quả ở khối chọn
select ở trong phải là 1 giá trị
select <tên cột>,(select <tên cột> from <tên bảng>) from <tên bảng>
Ví dụ: với dữ liệu của bảng BangDiem
select ten as Ten,
(select top 1 masv from BangDiem) as MaSV
from BangDiem
+ Tạo định danh cho cột select <tên cột> as <tên cột mới>
Vd: select MaSV as N’Mã sinh viên’
hoặc select MaSV as MSV from SinhVien
+ Có thể có lệnh chuyển case trong khối select
VD: hiện thị tên sv, giới tính nếu là nữ hiển thị là 0 nam là 1
Ta có bảng thông tin sinh viên như sau:
ANHMATTROI – TIN5A
19
select masv as N'Mã sinh viên',
ten N'Tên sinh viên',
ngaysinh as N'Ngày sinh',
case gioitinh
when N'Nam' then '1'
else '0'
end as N'Giới tính',
que as N'Quê'
from SinhVien
- From <từ bảng nào>
+ Nếu lấy dữ liệu từ nhiều bảng bạn có thể tạo bí danh cho bảng ví dụ như:
select a.MaSV, a.TenSV, b.DT
from SinhVien a, DiemThi b
where a.MaSV = b.MaSV
Thay cho:
select SinhVien.MaSV, SinhVien.TenSV, DiemThi.DT
from SinhVien, DiemThi
ANHMATTROI – TIN5A
20
where SinhVien.MaSV = DiemThi.MaSV
+ Lấy bản ghi từ khối chọn select bằng cách tạo định danh
VD:
select a.masv as N'Mã sinh viên'
from
(
select masv, ten
from SinhVien
) as a
- Where <điều kiện để lấy hay không lấy hàng này>
Điều kiện ở mệnh đề where:
+ =,>,<,>=,<=,<>,!>,!<,!= giá trị ô của cột đó so sánh với giá trị nào đó
Ví dụ: cho bảng điểm của sinh viên như sau:
ANHMATTROI – TIN5A
21
Cho biết tên những sinh viên có điểm >= 7
select ten
as N'Những sinh vien có điểm lớn hơn hoặc bằng 7'
from @bang_a
where diem >= 7
+ not between/between <giá trị 1> and <giá trị 2>: giá trị của ô thuộc cột đó không/nằm
từ giá trị 1 đến giá trị 2 và kiểu dữ liệu của hai giá trị đó là kiểu số(int, float, decimal,
datetime,..)
VD: cho biết những sinh viên có điểm trong khoảng [8,9]
select ten as N'Tên sinh viên'
from BangDiem
where diem between 8 and 9
VD: những sinh viên có điểm không nằm trong khoảng [8,9]
select ten as N'Tên sinh viên'
from BangDiem
where diem between 8 and 9
ANHMATTROI – TIN5A
22
+ like ‘%a%’ hoặc like ‘a%’ hoặc like ‘%a’ hoặc like ‘a_’ hoặc like ‘giá trị[kí tự]’: giá
trị của ô thuộc bảng có kiểu chữ có chung kí tự
VD: cho biết họ tên của những sinh viên có tên là Bình
select ten as N'Tên sinh viên'
from BangDiem
where ten like N'%Bình'
+ and not(<tên cột> = ‘s’ or <tên cột> = ‘d’): và không phải là s hoặc d
+ in (a,b,…): hoặc là a hoặc là b
+ not in (a,b,…): không là a mà cũng không là b
+ all(a,b): là cả a và b
+ any/some(a,b): là giá trị nào đó
+ is null: dùng <tên cột> is null chứ không phải <tên cột> = null khi ô thuộc cột đó có
giá trị null
+ exists/not exists: nếu khối chọn select ở mệnh đề where trả lại bản ghi rỗng/không
rỗng thì lấy/không lấy hàng đang duyệt
- Group by <gom nhóm theo cột nào>
+ Số cột cần đem gom nhóm ở group by phải >= số cột được chọn ở select(>=2) trừ đi
1
ANHMATTROI – TIN5A
23
+ Nếu có các hàm count/sum/avg/min/max(<tên cột>) ở select: những hàm này chỉ có
tác dụng trên nhóm
- Having <điền kiện> -- chỉ có tác dụng trên nhóm không có tác dụng đến toàn bảng
- Order by <sắp xếp theo cột nào> asc/desc
+ asc: sắp xếp tăng dần(mặc định)
+ desc: sắp xếp giảm dần
- Compute count/avg/min/max/sum(<tên cột>),… by <là một/nhiều trong các cột ở order
by
và thứ tự các cột phải giống như ở order by>
+ Bắt đầu từ hàng trên cùng đến cuối bảng của những cột sắp xếp ở order by tách lấy
những hàng có giá trị trùng nhau: các lệnh ở compute sẽ thực hiện trên những phần đã
tách ra
+ Đã có compute … by … phải có order by …. nếu compute không có by thì không
compute sẽ thực hiện trên toàn bảng
- Offset <nhảy mấy hàng từ trên xuống> rows
- Fetch next <chỉ lấy mấy hàng> rows only
- Thứ tự chạy các khối lệnh: khối lệnh from chạy đầu tiên -> khối lệnh where -> group
by/order by -> …. -> cuối cùng là khối lệnh select
- Nối kết quả của hai khối lệnh truy vấn bằng union hoặc union all, các cột ở kết quả hai
khối truy vấn phải cùng kiểu dữ liệu.
+ Union: nối hai khối đó lại xong sắp xếp theo thứ tự từ điển, những giá trị bị trùng chỉ
dữ lại một giá trị
+ Union all: chỉ nối khối 2 vào khối 1 xong không làm thay đổi gì
select <tên cột> from <tên bảng 1>
union/union all
select <tên cột> from <tên bảng 2>
Ví dụ:
select masv from SinhVien
union all
ANHMATTROI – TIN5A
24
select tensv from SinhVien
- Loại những giá trị bị trùng ở kết quả truy vấn của khối truy vấn 1 với giá trị ở kết quả
truy vấn của khối truy vấn 2
(khối truy vấn 1)
minus
(khối truy vấn 2)
Ví dụ:
select hoten from SinhVien
minus
select hoten from SinhVien
where masv = 10001
6. Biến và câu lệnh rẽ nhánh, vòng lặp
- Biến
+ Khai báo biến: declare @<tên biến> <kiểu dữ liệu>
Biến do người dùng khai báo luôn có @ trước tên biến, lúc khai báo có thể gán giá mặc
định cho biến: declare @x int = 0, @y float = 1
ANHMATTROI – TIN5A
25
+ Gán giá trị: set @<tên biến> = <giá trị>
Mỗi lần gán giá trị cho một biến là một set
+ Một số biến hệ thông thường dùng: biến hệ thống có hai chữ @@ trước tên biến và
chỉ được dùng không thay đổi giá trị của nó theo ý muốn được
+ Con trỏ: khai báo
declare @<khai báo các biến, số biến khai báo ở dòng này = số cột ở câu lệnh truy
vấn ở dưới>
declare <tên con trỏ không có @ ở trước tên biến> cursor for
select <các cột số các cột = số các biến khai báo ở trên>
from <tên bảng>
…………………
open <tên con trỏ>
fetch next from <tên con trỏ> into <thứ tự các biến phù hợp với các cột ở trên>
while @@fetch_status = 0 begin
@@fetch_status Số nguyên
Nếu là 0 đọc thành công
còn nếu không ngược lại
@@connections Số nguyên
Tổng số kết nối tới
MSSQL
@error Số nguyên
Nếu là 0 không có lỗi còn
nếu không tương ứng với
các lỗi
@@language Chuỗi
Tên ngôn ngữ mà
MSSQL đang sử dụng
@@rowcount Số nguyên
Tổng số mẫu tin được tác
động vào câu lệnh truy
vấn gần nhất
@@servername Chuỗi Tên máy
@@servicename Chuỗi Tên dịch vụ
@@version Chuỗi
Phiên bản MSSQL đang
cài trên máy
ANHMATTROI – TIN5A
26
<các lệnh lập trình/truy vấn>
fetch next from <tên con trỏ> into <các biến>
end
close <tên con trỏ>
deallocate <tên con trỏ>
Ví dụ: khai báo biến @ToaDo có kiểu dữ liệu table chứa hai cột x, y sau đó duyệt
bảng bằng con trỏ
-- Tạo bảng ToaDo lưu tọa đọ của các điểm
declare @ToaDo table
(
x int,
y int
)
insert into @ToaDo
values(1,2)
insert into @ToaDo
values(-3,2)
insert into @ToaDo
values(6,8)
insert into @ToaDo
values(2,4)
insert into @ToaDo
values(9,1)
insert into @ToaDo
values(12,5)
-- Duyệt tọa độ các điểm
declare @x int, @y int
declare contro cursor for
select x, y
from @ToaDo
open contro
declare @i int = 1
fetch next from contro into @x, @y
while @@FETCH_STATUS = 0 begin
print N'Tọa độ điểm thứ ' + cast(@i as varchar(2))
+ N' là: (' + cast(@x as varchar(2))
+ ',' + cast(@y as varchar(2)) + ')'
set @i = @i + 1
fetch next from contro into @x, @y
end
close contro
deallocate contro
ANHMATTROI – TIN5A
27
- Câu lệnh rẽ nhánh if … else
if <điều kiện> begin
<các lệnh -- nếu có một lệnh không cần begin end cũng được>
end
else begin
<các lệnh>
end
+ Nếu điều kiện ở khối if đúng thì các lệnh ở khối if chạy còn nếu sai thì các lệnh
ở khối else chạy
+ Nếu chỉ cần các lệnh ở khối if chạy hay không thì không cần khối else
Ví dụ: if 10>9 print N'Đúng'
+ Dùng exists, not exists trong if: nếu tồn tại hoặc không tồn tại
Ví dụ: tạo cơ sở dữ liệu quản lí sinh viên có kiểm tra xem cơ sở dữ liệu đã có chưa.
Nếu chưa có thì tạo cơ sở dữ liệu đó. Nếu có rồi thì hiện ra thông báo cơ sở dữ liệu
này đã có rồi.
use master
if not exists(select 'true' from sys.databases where name = 'QLSV')
begin
create database QLSV on
(
name = 'Quanlysinhvien',
filename = 'C:Bai tapQuanlysinvien.mdf',
size = 10mb,
maxsize = 30mb,
filegrowth = 5%
)
log on
(
name = 'Quanlysinhvien_log',
filename = 'C:Bai tapQuanlysinvien_log.ldf',
ANHMATTROI – TIN5A
28
size = 5mb,
maxsize = 20mb,
filegrowth = 5%
)
end
else print N'Cơ sở dữ liệu QLSV đã có rồi'
Ví dụ: với bảng
use QLSV
if not exists(select * from QLSV.sys.objects where name = 'LopHoc')
begin
create table LopHoc
(
malop nchar(30) constraint KhoaChinh primary key,
tenlop nchar(20) not null,
diadiem nchar(20) not null,
magvql int not null
)
end
else print N'Bảng lớp học đã có rồi'
Ví dụ: với view
use QLSV
if exists(select * from QLSV.sys.views where name = 'Diem_View')
begin
drop view Diem_View
print N'Diem_View đã xóa thành công'
end
else print N'Diem_view không có trong cơ sở dữ liệu QLSV nên không xóa
được'
- Câu lệnh chuyển case
case <tên cột/tên biến>
when <nếu giá trị ở cột là x/của biến là x thì>
then <thực hiện công việc gì đó>
when <nếu giá trị ở cột là y/của biến là y thì>
then <thực hiện công việc gì đó>
else <nếu không phải là những giá trị ở các when thì thực hiện
công việc>
end
VD: tạo biến có kiểu dữ liệu là bảng có một cột x lưu các số và kiểm tra các số này có
chia hết cho 2 không
ANHMATTROI – TIN5A
29
declare @a table
(
x int not null
)
insert into @a values(9)
insert into @a values(2)
insert into @a values(0)
insert into @a values(1)
insert into @a values(8)
insert into @a values(2)
------------------------
select x,case x%2
when 0 then N'Có'
else N'Không'
end as N'Chia hết cho 2'
from @a
- Vòng lặp while
while <điều kiện> begin
<các lệnh>
+ nếu gặp lệnh continue ở đây sẽ bỏ qua những lệnh ở dưới continue và chuyển
sang vòng lặp tiếp theo
+ nếu gặp break thì dừng hẳn vòng lặp
+ continue và break chỉ xuất hiện trong vòng lặp
end
VD: hiện thị các số từ 1 đến 15 nếu gặp số 6, 10 thì không hiện thị những số này
declare @i int
set @i = 1
print N'Các số i là'
while @i<16 begin
if @i=6 or @i=10 begin
set @i = @i + 1
ANHMATTROI – TIN5A
30
continue
end
print 'i = ' + cast(@i as varchar(3))
set @i = @i + 1
end
VD: tìm ước chung lớn nhất của 112 va 68
print N'Ước chung lớn nhất của 112 và 68 là: '
declare @a int,@b int, @phandu int
set @a = 112
set @b = 68
while 1>0 begin
if @b=0 break
set @phandu = @a%@b
set @a = @b
set @b = @phandu
end
print cast(@a as char(3))
7. Thủ tục
- Tạo thủ tục:
ANHMATTROI – TIN5A
31
create procedure/proc <tên thủ tục>(<các biên tham số truyền vào output/out(không
nhất thiết phải có)>) as
with recompile/with encryption -- dòng này có hoặc không
begin
<các khối lệnh truy vấn ở đây>
end
+ with recompile: mỗi lần gọi thủ tục – thủ tục sẽ biên dịch lại
+ with encryption: không xem được nội dung của thủ tục
- Sửa thủ tục:
Thay create bằng alter và bắt đầu thay đổi thủ tục đã tạo
- Xóa thủ tục:
drop procedure <tên thủ tục>
- Lời gọi thủ tục:
exec <tên thủ tục> <các tham số truyền vào>
+ Nếu tham số truyền vào khai báo ở lệnh tạo thủ tục là output/out thì các tham số
truyền vào cũng bị thay đổi theo
Ví dụ: Tạo thủ tục có tên CTGD_Ngay nhận ngày giao dịch là tham số truyền vào,
hiện thị thông tin giao dịch ngày như: số tài khoản, loại giao dịch, số tiền giao dịch
trong ngày đó và tổng số tiền theo từng loại giao dịch. Hiển thị tông tin giao dịch
ngày 2-2-2012
create procedure CTGD_Ngay(@Ngay datetime) as
begin
select SoTK, LoaiGD, sum(SoTienGD)
as N'Tổng số tiền giao dịch'
from ChiTietGD
where NgayGD = @Ngay
group by SoTK, LoaiGD
end
exec CTGD_Ngay '2-2-2012'
ANHMATTROI – TIN5A
32
8. Hàm
- Tạo hàm
+ Dạng chung:
create function <tên hàm>(<các tham số truyền vào>)
returns <kiểu giá trị trả về> as begin
<các câu lệnh truy vấn hoặc các lệnh lập trình>
return <giá trị trả lại>
end
+ Tạo hàm với kiểu giá trị trả lại là bảng:
create function <tên hàm>(<các tham số truyền vào>)
returns @<tên biến có kiểu dữ liệu bảng> table
(
khai báo các biến ở đây những biến này phải có kiểu dữ liệu phù hợp với các
cột được chọn ở
khối lệnh select sẽ được định nghĩa ở dưới đây
) as begin
insert into @<tên biến bảng ở trên>
select <chọn các cột muốn gán cho các biến>
from <lấy từ bảng nào>
………………
return
end
- Sửa hàm:
Thay create bằng alter
- Xóa hàm:
drop function <tên hàm>
ANHMATTROI – TIN5A
33
- Lời gọi hàm:
+ Với hàm trả lạ một giá trị
select dbo.<tên hàm>(<truyền cho hàm những tham số nào>)
Ví dụ: tạo hàm TienTK nhận số tài khoản là tham số truyền vào và trả về số tiền trong
tai khoản này. In ra số tiền của tài khoản 9513
create function TienTK(@SoTK char(12))
returns int as
begin
return
(
select SoTien
from TaiKhoan
where @SoTK = SoTK
)
end
declare @sotien int = 0
set @sotien = dbo.TienTK('9513')
print N'Số dư: '
print @sotien
+ Với hàm trả lại một bảng dữ liệu
select */……
from dbo.<tên hàm>(<các tham số truyền vào>)
Ví dụ: tạo hàm CTTGD_TK nhận tham số truyền vào là số tài khoản và trả về bản
ghi chứa thông tin sau: loại giao dịch, ngày giao dịch, số tiền giao dịch. Viêt lời gọi
hàm cho tài khoản 9512
create function CTGD_TK(@SoTK char(12))
returns @Bang table
(
LoaiGD char(3),
NgayGD datetime,
SoTienGD int
) as
begin
insert into @Bang
select LoaiGD, NgayGD, SoTienGD
from ChiTietGD
ANHMATTROI – TIN5A
34
where @SoTK = SoTK
return
end
select * from dbo.CTGD_TK(‘9512’)

Más contenido relacionado

La actualidad más candente

Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtHưởng Nguyễn
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)Pix Nhox
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1pisu412
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)iwanttoit
 
Hỗ trợ ra quyết định
Hỗ trợ ra quyết địnhHỗ trợ ra quyết định
Hỗ trợ ra quyết địnhlmphuong06
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm nataliej4
 
Hệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị miniHệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị miniHan Nguyen
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhCao Toa
 
Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++nataliej4
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLMasterCode.vn
 
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựXây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựAskSock Ngô Quang Đạo
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngNguyễn Danh Thanh
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTMasterCode.vn
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
UML mô hình khái niệm
UML mô hình khái niệmUML mô hình khái niệm
UML mô hình khái niệmNguyễn Phúc
 

La actualidad más candente (20)

Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
 
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
 
BTL Lập trình C#
BTL Lập trình C#BTL Lập trình C#
BTL Lập trình C#
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
 
Hỗ trợ ra quyết định
Hỗ trợ ra quyết địnhHỗ trợ ra quyết định
Hỗ trợ ra quyết định
 
C4 1 tuan 14
C4 1 tuan 14C4 1 tuan 14
C4 1 tuan 14
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm
 
Hệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị miniHệ thống quản lý mua hàng siêu thị mini
Hệ thống quản lý mua hàng siêu thị mini
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tính
 
Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQL
 
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựXây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Các mô hình dữ liệu
Các mô hình dữ liệuCác mô hình dữ liệu
Các mô hình dữ liệu
 
UML mô hình khái niệm
UML mô hình khái niệmUML mô hình khái niệm
UML mô hình khái niệm
 

Similar a Co so du lieu t sql

Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3pisu412
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfQuyVo27
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Hồ Lợi
 
Boi duong tin hoc excel rat hay
Boi duong tin hoc excel rat hayBoi duong tin hoc excel rat hay
Boi duong tin hoc excel rat haysang2792
 
csdl bai-thuchanh_01
csdl bai-thuchanh_01csdl bai-thuchanh_01
csdl bai-thuchanh_01kikihoho
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Vo Oanh
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02kikihoho
 
Management Statistics
Management StatisticsManagement Statistics
Management StatisticsAnh Khoa Lê
 
Bài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverBài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverMasterCode.vn
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptxssuser49db3c1
 
Module4 _Chuẩn kỹ năng sử dụng CNTT cơ bản
Module4 _Chuẩn kỹ năng sử dụng CNTT cơ bảnModule4 _Chuẩn kỹ năng sử dụng CNTT cơ bản
Module4 _Chuẩn kỹ năng sử dụng CNTT cơ bảntiennd67
 
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngocGiao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngocNgoc Vu Thi Quynh
 
bai-giang-excel.pptx
bai-giang-excel.pptxbai-giang-excel.pptx
bai-giang-excel.pptxasimet001
 
Young mine textbook
Young mine textbookYoung mine textbook
Young mine textbookhoaibao2603
 

Similar a Co so du lieu t sql (20)

Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdf
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 
Sql understanding
Sql understandingSql understanding
Sql understanding
 
Boi duong tin hoc excel rat hay
Boi duong tin hoc excel rat hayBoi duong tin hoc excel rat hay
Boi duong tin hoc excel rat hay
 
csdl bai-thuchanh_01
csdl bai-thuchanh_01csdl bai-thuchanh_01
csdl bai-thuchanh_01
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2
 
03 table
03 table03 table
03 table
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
 
Management Statistics
Management StatisticsManagement Statistics
Management Statistics
 
Phan3
Phan3Phan3
Phan3
 
Access1
Access1Access1
Access1
 
Bài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverBài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL server
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PII).pptx
 
Module4 _Chuẩn kỹ năng sử dụng CNTT cơ bản
Module4 _Chuẩn kỹ năng sử dụng CNTT cơ bảnModule4 _Chuẩn kỹ năng sử dụng CNTT cơ bản
Module4 _Chuẩn kỹ năng sử dụng CNTT cơ bản
 
02 access
02 access02 access
02 access
 
Tip oracle
Tip oracleTip oracle
Tip oracle
 
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngocGiao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
 
bai-giang-excel.pptx
bai-giang-excel.pptxbai-giang-excel.pptx
bai-giang-excel.pptx
 
Young mine textbook
Young mine textbookYoung mine textbook
Young mine textbook
 

Más de ANHMATTROI

Chuỗi số tăng dần lớn nhất
Chuỗi số tăng dần lớn nhấtChuỗi số tăng dần lớn nhất
Chuỗi số tăng dần lớn nhấtANHMATTROI
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Cập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vbCập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vbANHMATTROI
 
Cap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NETCap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NETANHMATTROI
 
Thuat toan Prim
Thuat toan PrimThuat toan Prim
Thuat toan PrimANHMATTROI
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaANHMATTROI
 
Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++ANHMATTROI
 
Mot so bai toan quy hoach dong
Mot so bai toan quy hoach dongMot so bai toan quy hoach dong
Mot so bai toan quy hoach dongANHMATTROI
 

Más de ANHMATTROI (8)

Chuỗi số tăng dần lớn nhất
Chuỗi số tăng dần lớn nhấtChuỗi số tăng dần lớn nhất
Chuỗi số tăng dần lớn nhất
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Cập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vbCập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vb
 
Cap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NETCap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NET
 
Thuat toan Prim
Thuat toan PrimThuat toan Prim
Thuat toan Prim
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi Java
 
Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++
 
Mot so bai toan quy hoach dong
Mot so bai toan quy hoach dongMot so bai toan quy hoach dong
Mot so bai toan quy hoach dong
 

Co so du lieu t sql

  • 1. ANHMATTROI – TIN5A 1 Cơ sở dữ liệu T-SQL 1. Các kiểu dữ liệu - Các kiểu dữ liệu thường dùng: + Kiểu số: Số nguyên: tinyint(8bit), smallint(16bit), int(32bit), bigint(64bit) Số thực: float(32-64bit), real(32bit), decimal(5-17B), numberic(5-17B), money(8B) + Kiểu chữ: char(n), varchar(n), nchar(n), nvarchar(n), text với n là số kí tự. Kiểu nchar(n) và nvarchar(n) biểu diễn các kí tự mã Unicode. Kiểu char(n), varchar(n) biểu diễn các kí tự mã Ascii Char(n): 1 <= n <= 8000 mỗi kí tự cần 8bit để lưu trữ Nchar(n): 1 <= n <= 4000 mỗi kí tự cần 16bit để lưu trữ Varchar(n): 1 <= n <= 8000 mỗi kí tự cần 8bit để lưu trữ + Ngày giờ: smalldatetime, datetime(8B), date(3B), time(3-5B) + Chuỗi bit: binary, varbinary, image + Kiểu logic: bit những số khác 0 là 1 còn 0 vẫ là 0, chỉ có 3 giá trị 0, 1, null + Kiểu dữ liệu bảng: table - Các kiểu dữ liệu khi biểu diễn cần đặt giữa hai dấu nháy đơn: char, nchar, text, datetime, nchar, nvarvhar. - Chuyển kiểu dữ liệu: dùng cast(<kiểu dữ liệu cũ> as <kiểu dữ liệu mới>) hoặc dùng convert(<kiểu dữ liệu mới>, <kiểu dữ liệu cũ>) Ví dụ: print 17/9 print 17/cast(9 as float) print 17/9 print 17/convert(float, 9) - Hiển thị ra màn hình: trong sql có hai tab hiện thị
  • 2. ANHMATTROI – TIN5A 2 + Tab results: hiện thị kết quả của câu lệnh truy vấn VD: declare @x int = 9 select @x as N'Giá trị của x là' + Tab messages: hiển thị chuỗi kí tự hoặc số bằng câu lệnh print <chuỗi kí tự hoặc một số>, chuỗi kí tự đặt giữa hai dấu nháy đơn ‘<đặt chuỗi kí tự ở đây>’. Nếu chuỗi kí tự có mã unicode thì thêm kí tự N đằng trước hai dấu nháy đơn N’ … ‘ VD: print 'sql server' print N'Cơ sở dữ liệu' print 6.78 print 5+6 - Chú thích: dòng chú thích không được biên dịch, nó chỉ để cho dễ hiểu đoạn chương trình này ta đang làm gì. Có hai cách chú thích: + C1: dùng hai dấu gạch ngang viết liền -- <dòng chú thích> cách này chỉ có tác dụng trên một dòng + C2: dùng /* đây là dòng chú thích */ cách này có tác dụng trên nhiều dòng - Trong sql không phân biệt chữ in hoa hay chữ thường 2. Các phép toán - Các phép tính + Cộng hai số hoặc nối hai chuỗi - Trừ hai số * Nhân hai số / Chia hai số, nếu cả hai số có kiểu số nguyên thì kết quả là chia lấy phần nguyên % Chia lấy phần dư: điều kiện hai số có kiểu nguyên
  • 3. ANHMATTROI – TIN5A 3 Ví dụ: print N'Cơ sở dữ liệu' + 'T-SQL' print 2+3 print 8-13 print 3%2 print 4*5 print 8/5 print 8.0/5 - Các phép logic and or 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 1 not 0 1 1 0 - Các phép so sánh = Phép so sánh bằng > Lớn hơn < Nhỏ hơn <> Khác != khác >= Lớn hơn hặc bằng
  • 4. ANHMATTROI – TIN5A 4 <= Nhỏ hơn hoặc bằng !< Không nhỏ hơn !> Không lớn hơn 3. Các lệnh làm việc với cơ sở dữ liệu và bảng a. Cơ sở dữ liệu - Tạo cơ sở dữ liệu: use master create database <tên cơ sở dữ liệu> on ( name = '<tên file>', filename = '<đường dẫn tới thư lưu file<tên file ở trên>.mdf', sixe = <kích thước mặc định đơn vị là MB>, maxsize = <kich thước tối đa>, filegrowth = <độ phình> ) log on ( name = '<tên file>', filename = '<đường dẫn tới thư mục lưu file<tên file ở trên>.ldf', size = <kích thước mặc định đơn vị là MB>, maxsize = <kích thước tối đa>, filegrowth = <độ phình> ) + Tên cơ sở dữ liệu không có dấu cách, không chứa các kí tự đặc biệt, không bắt đầu bằng kí tự số,... + Độ phình: khi kích thước của file lớn hơn kích thước mặc định thì size = size + độ phình(đơn vị là mb hoặc %) sao cho không lớn hơn maxsize Ví dụ: tạo cơ sở dữ liệu quản lí sinh viên use master create database QLSV on ( name = 'Quanlysinhvien', filename = 'C:Bai tapQuanlysinvien.mdf', size = 10mb,
  • 5. ANHMATTROI – TIN5A 5 maxsize = 30mb, filegrowth = 5% ) log on ( name = 'Quanlysinhvien_log', filename = 'C:Bai tapQuanlysinvien_log.ldf', size = 5mb, maxsize = 20mb, filegrowth = 5% ) - Xóa cơ sở dữ liệu: drop database <tên cơ sở dữ liệu> Ví dụ: xóa cơ sở dữ liệu quản lí sinh viên use master drop database QLSV - Đổi tên cơ sở dữ liệu: alter database <tên cơ sở dữ liệu cũ> modify name = <tên mới> Ví dụ: đổi tên cơ sở dữ liệu quản lí sinh viên use QLSV alter database QLSV modify name = QuanLiSinhVien - Đổi kích thước: alter database <tên cơ sở dữ liệu> modify size = <mấy mb> - Thay đổi thuộc tính của cơ sở dữ liệu: exec sp_dbop <tên cơ sở dư liệu> , 'read only' , 'true/false' b. Bảng - Tạo bảng: use <tên cơ sơ dư liệu> create table <tên bảng>
  • 6. ANHMATTROI – TIN5A 6 ( <tên cột> <kiêu dữ liệu> not null (có hoặc không mặc định là null), ................................................. ) + Tên cột không chứa các kí tự đặc biệt, không bắt đầu bằng kí tự số, không có dấu cách,… + Nếu bạn đặt cột có thuộc tính not null lúc chèn dữ - nhập dữ liệu vào bảng bạn phải điền dữ liệu cho cột này không được không được bỏ qua hay để trống Ví dụ: tạo bảng sinh viên trong cơ sở dữ liệu quản lí sinh viên có các cột sau: mã sinh viên có kiểu char, họ và tên sinh viên kiểu nvarchar, ngày sinh kiểu datetime, giới tính kiểu varchar, quê quán kiểu nvarchar. use QLSV create table SinhVien ( MaSV char(11) not null, TenSV nvarchar(20), NgaySinh datetime, GioiTinh nvarchar(4), QueQuan nvarchar(30) ) - Tạo bảng có các thuộc tính như: khóa chính, khóa ngoại, có điều kiện cho cột: use <tên cơ sở dữ liệu> create table <tên bảng> ( <tên cột> <kiểu dữ liệu> constraint <tên ràng buộc khóa chính> primary key, <tên cột> <kiểu dữ liệu>, <tên cột> <kiểu dữ liệu> constraint <tên ràng buộc khóa ngoại> foreign key references <tên bảng chứa cột cần kết nối>(<tên cột>) ............................. ) Ví dụ: tạo bảng sinh viên có cột mã sinh viên là khóa chính, tên sinh viên trong cơ sở dữ liệu quản lí sinh viên use QLSV
  • 7. ANHMATTROI – TIN5A 7 create table SinhVien ( MaSV char(10) not null constraint KhoaChinh primary key, TenSV nvarchar(20) ) Ví dụ: tạo bảng lớp học có cột mã lớp là khóa chính, tên lớp và cột mã sinh viên là khóa ngoại tham chiếu đến mã sinh viên ở bảng sinh viên trong cơ sở dữ liệu quản lí sinh viên use QLSV create table LopHoc ( MaLop char(10) not null primary key, TenLop varchar(5), MaSV char(10) not null constraint KhoaNgoai foreign key references SinhVien(MaSV) ) + Các ràng buộc khóa chính và khóa ngoài nếu không có từ khóa constraint tên ràng buộc khóa chính, khóa ngoại sẽ do trình biên dịch đặt tên. + Cột có ràng buộc khóa ngoại khi tham chiếu đến cột của bảng khác thì hai cột này phải cùng kiểu dữ liệu, cùng kích thước. + Nếu trong bảng có từ hai khóa chính trở lên ta có thể dùng constraint <tên khóa chính> primary key (<tên các cột là khóa chính>) các cột này chỉ khai báo có tên cột và kiểu dữ liệu ở trên dòng này. Mỗi bảng chỉ có một tên khóa chính. + Nếu trong bảng có một cột là khóa chính thì giá trị ở cột này không có giá trị nào bị trùng nhau. Nếu có từ hai khóa chính thì giá trị ở mỗi hàng phải khác nhau không được trùng với hàng nào. + Tạo bảng có thêm kiểm tra dữ liệu cho cột bằng từ khóa check: <tên cột> <kiểu dữ liệu> constraint <tên ràng buộc> check(<tên cột> <toán tử điều kiện >,<,>=,…> <toán hạng>) + Đặt giá trị mặc định cho cột: <tên cột> <kiểu dữ liệu> default <giá trị mặc định> Khi thành lập giá trị mặc định cho cột lúc chèn dữ liệu vào bảng nếu không chèn dữ liệu cho cột này thì trình biên dịch tự động gán giá trị mặc định cho cột đó + Tự động tăng giá trị cho cột có kiểu dữ liệu số dùng từ khóa identity(a,b):
  • 8. ANHMATTROI – TIN5A 8 <tên cột> <kiểu dữ liệu> identity(a,b) Với a là giá trị đầu tiên của cột, b là sau mỗi lần chèn một hàng thành công vào bảng đó a sẽ bằng: a = a + b. Lúc chèn dữ liệu vào bảng ta không chèn dữ liệu cho cột này nữa VD: tạo bảng sinh viên (*) use QLSV create table SinhVien ( MaSV int not null identity(100000,1), TenSV nvarchar(20), NgaySinh datetime not null, Diem float check (Diem>=0 or Diem <=10), GioiTinh nvarchar(4) default N'Nam', QueQuan nvarchar(30), -- giả sử MaSV và NgaySinh là khóa chính constraint KhoaChinh primary key(MaSV,NgaySinh) ) - Xóa bảng: drop table <tên bảng> + Nếu đang có cột từ bảng khác tham chiếu đến phải xóa bảng đó trước mới xóa được bảng này Ví dụ: xóa bảng sinh viên vừa tạo ở trên use QLBH drop table SinhVien - Thêm cột: alter table <tên bảng> add <tên cột> <kiểu dữ liệu> not null(có hoặc không) Ví dụ: thêm cột tên lớp vào bảng sinh viên use QLSV alter table SinhVien add TenLop varchar(10) - Xóa cột:
  • 9. ANHMATTROI – TIN5A 9 alter table <tên bảng> drop column <tên cột> Ví dụ: xóa cột tên lớp trong bảng sinh viên use QLSV alter table SinhVien drop column TenLop - Thay đổi kiểu dữ liệu của cột: alter table <tên bảng> alter column <tên cột> <kiểu dữ liệu mới> not null (có hoặc không) - Đặt hoặc thay đổi khóa chính: alter table <tên bảng> add constraint <tên ràng buộc> primary key(<tên cột>) Chú ý: cột phải có thuộc tính not null mới thêm hoặc thay đổi khóa chính và bảng hiện tại đang rỗng chưa có hàng nào - Kết nối hai cột thuộc hai bảng khác nhau: alter table <tên bảng 1> add constraint <tên ràng buộc> foreign key(<tên cột thuôc bảng 1>) references <tên bảng 2>(<tên cột của bảng 2>) - Đặt giá trị mặc định cho cột: alter table <tên bảng> add default <giá trị mặc định> for <tên cột> - Xem đặc tính của bảng: exec sp_help <tên bảng> - Chèn dữ liệu vào bảng hay nhập dữ liệu vào từng hàng của bảng: insert into <tên bảng>(<tên cột 1> , <tên cột 2> , .....) values(<giá trị 1> , <giá trị 2> , ...........) + Chèn dữ liệu cho n hàng thì viết n dòng trên và kiểu dữ liệu chèn vào phải phù hợp với từng cột Ví dụ: chền dữ liệu cho bảng sinh viên ở ví dụ (*) use QLBH insert into SinhVien(TenSV,NgaySinh,Diem,GioiTinh,QueQuan)
  • 10. ANHMATTROI – TIN5A 10 values(N'Đoàn Văn Dũng','06/23/1992',9.5,N'Nữ',N'Nam Định') insert into SinhVien(TenSV,NgaySinh,Diem,GioiTinh,QueQuan) values(N'Đỗ Thanh Bình','06/3/1993',9.5,N'Nữ',N'Hà Nội') insert into SinhVien(TenSV,NgaySinh,Diem,GioiTinh,QueQuan) values(N'Nguyễn Thị Đức','12/15/1993',9.5,N'Nữ',N'Hải Phòng') - Chèn dữ liệu từ bảng khác vào: insert into <tên bảng> select <tên các cột muốn thêm> from <lấy từ bảng nào> + Nếu muốn loại bớt mấy hàng trước khi chèn vào bảng thì thêm where + Số cột chọn ở select == số cột bảng chèn vào và phải cùng kiểu dữ liệu - Lấy các hàng của bảng khác vào bảng: hai bảng có cùng sự phù hợp về kiểu dữ liệu giữa các cột với nhau: select <tên các cột các cột> into <tên bảng cần chèn vào> from <lấy từ bảng nào> - Xóa từng hàng một của bảng: + Trên một bảng: delete <tên bảng> where <điều kiện> + Trên nhiều bảng: delete from <tên bảng 1> from <tên bảng 2> …… where <điều kiện> Ví dụ: xóa thông tin sinh viên Đoàn Văn Dũng delete SinhVien where TenSV = N'Đoàn Văn Dũng' - Xóa tất cả các hàng trong bảng: truncate table <tên bảng> - Sửa đổi thông tin một ô, nhiều ô hoặc cả cột trong bảng: update <tên bảng> set <tên cột> = <dữ liệu> (nếu lấy dữ liệu từ một cột thuộc bảng khác ta thêm) from <cột đó ở bảng nào> where <điều kiện> - Ngắt kết nối ràng buộc hai bảng: khi không chèn được dữ liệu vào bảng alter table <tên bảng> nocheck constraint <tên ràng buộc>
  • 11. ANHMATTROI – TIN5A 11 Để kết nối lại ràng buộc thay nocheck bằng check - Xem ràng buộc có được tạo thành công không: exec sp_helpconstraint <tên bảng> - Xóa ràng buộc: khóa chính, khóa ngoài: alter table <tên bảng> drop <tên ràng buộc> c. Tạo view - Tạo view: use <tên cơ sở dữ liệu> create view <tên view> as select <tên các cột> from <từ bảng nào> - Xem thông tin view: exec sp_helptext <tên view> - Sửa view: giống như ở bảng alter view <tên view> ………………………… - Xóa view: drop view <tên view> - Truy vấn: select <các cột muôn lấy từ view> from <lấy từ view nào> where <điều kiện> d. Nối hai bảng tạo thành bảng mới select <tên những cột cần nối> from <những cột đó có từ bảng nào> join/inner join <nối vào bảng nào> on <điều kiện kết nối>
  • 12. ANHMATTROI – TIN5A 12 where <điều kiện> Ví dụ: ta có hai bảng sau BangA BangB Bảng kết quả: select * from BangA as a inner join BangB as b on a.ma = b.ma select a.ma, a.ten, b.diem from BangA as a inner join BangB as b on a.ma = b.ma
  • 13. ANHMATTROI – TIN5A 13 select a.ma, a.ten, b.diem from BangA as a inner join BangB as b on a.ma = b.ma where a.ma = '1000000001' 4. Một số hàm thông dụng + sum(<tên cột có kiểu số>): tổng các số trong cột này + avg(<tên cột có kiểu số>): giá trị trung bình + count(*): số hàng trong bảng + min(<tên cột>): giá trị nhỏ nhất trong cột + max(<tên cột>): giá trị lớn nhất + getdate(): trả về ngày tháng năm hiện tại + year(<giá trị có kiểu ngày tháng>): trả lại năm + month(<giá trị có kiểu ngày tháng >): trả lại tháng + day(<giá trị có kiểu ngày tháng>): trả lại ngày + sysdatetime(): thời gian SQL Server
  • 14. ANHMATTROI – TIN5A 14 + concat(‘chuỗi 1’,’chuỗi 2’,…): nối các chuỗi lại với nhau + cast(<kiểu dữ liệu cũ> as <kiểu dữ liệu mới>): chuyển kiểu dữ liệu + convert(<kiểu dữ liệu mới>, <kiểu dữ liệu cũ>): chuyển kiểu dữ liệu + rtrim(<chuỗi>): vất bỏ những khoẳng trắng(dấu cách) ở bên phải chuỗi + ltrim(<chuỗi>): ------------------------------------------------------- trái chuỗi + left(<chuỗi>,<lấy mấy kí tự tính từ bên trái sang phải>): + right(<chuỗi>,<lấy mấy kí tự tính từ phải sang trái>): + len(<chuỗi>): hàm trả về số kí tự của chuỗi + datalength(<chuỗi>): hàm trả về số kí tự của chuỗi nhân với kích thước của một kí tự(B) + charindex(<chuỗi cần tìm>,<tìm ở trong chuỗi nào>,<bắt đầu tìm ở vị trí nào, chỗ này không có mặc định sẽ là 1>): hàm trả về vị trí của chuỗi con trong chuỗi mẹ + substring(<chuỗi gốc>,<vị trí bắt đầu>,<lấy mấy kí tự từ vị trí bắt đầu>): lấy n kí tự trong chuỗi gốc bắt đầu từ vị trí bắt đầu + choose(<chọn kí tự ở vị trí thứ mấy>,<chuỗi gốc>): hàm này chỉ có ở sql server 2012 + reverse(<chuỗi>): đảo ngược chuỗi + upper(<chuỗi>): chuyển chuỗi đó sang kí tự hoa + lower(<chuỗi>): chuyển chuỗi sang kí tự thường + replace(<chuỗi gốc>,<chuỗi bị thay thế là chuỗi con của chuỗi gốc>,<thay bằng chuỗi nào>): + dateadd(<year/month/week/dayhour/minute/second/…>,<thêm giảm bao nhiêu>,<của ngày nào>): + datediff(<year/month/week/…>,<ngày 1>,<ngày 2>): sự chênh lệnh + datename(<year/month/week/…>,<cột có giá trị ngày tháng>): trả lại tên + datepart(<year/month/…>,<cột có giá trị ngày tháng>): trả lại năm,tháng,… + format( value, format, [culture] ): + abs(<giá trị>): trả lại giá trị tuyệt đối + power(x,y): xy
  • 15. ANHMATTROI – TIN5A 15 + sqrt(x): căn bậc hai của x + square(x): x + round(<số đem làm tròn>,<làm tròn đén chữ số thứ mấy số dương làm tròn đằng sau dấu phẩy, số âm làm tròn đằng trước dấu phẩy>): + rand(): tạo ra một số ngẫu nhiên từ 0.0 -> 1.0 + iif(<biểu thức so sánh>,’true’,’false’): nếu đúng trả lại true sai trả lại false + coalesce(<cột 1>,<cột 2>,’chuỗi a’): nếu cả hai giá trị ở cả hai cột là null thì trả lại chuỗi a + db_name(): tên cơ sở dữ liệu + host_name(): host name + current_user(): người dùng hiện tại + user_name(): tên người dùng + app_name(): tên ứng dụng + isnull(<tên cột>,<nếu giá trị ở cột đó là null thì thay bằng giá trị nào>): 5. Câu lệnh truy vấn a. Khung câu lệnh truy vấn - Tạo định danh cho cột: <tên cột> as <bí danh cho cột> VD: MaSV as MaSinhVien hoặc MaSV as N’Mã sinh viên’ - Select <tên các cột ngăn cách nhau bằng dấu phẩy> + select * : lấy tất cả các cột Ví dụ: cho bảng SinhVien gồm các thông tin sinh viên
  • 16. ANHMATTROI – TIN5A 16 select * from SinhVen được bảng ban đầu + select top <lấy mấy hàng từ trên xuống> <tên cột>,…….. select top 3 * from SinhVien + select distinct <tên cột>: những giá trị bị trùng trên cột đó chỉ lấy một giá trị select distinct que from SinhVien + select count(*)/avg(<tên cột>)/sum(<tên cột>)/min(<tên cột>)/max(<tên cột>): cột có kiểu số nguyên hoặc số thực
  • 17. ANHMATTROI – TIN5A 17 Ví dụ: cho bảng BangDiem sau select count(*) as N'Số sinh viên' from BangDiem select round(avg(diem),1) as N'Điểm trung bình' from BangDiem select sum(diem) as N'Tổng điểm' from BangDiem select min(diem) as N'Điểm thấp nhất' from BangDiem select max(diem) as N'Điểm cao nhất' from BangDiem
  • 18. ANHMATTROI – TIN5A 18 + Nếu lấy dữ liệu từ nhiều bảng khác nhau phải xác định rõ cột đó thuộc bảng nào bằng cách select <tên bảng>.<tên cột> + Có thể có thêm khối chọn select nữa ở khối chọn select ngoài, kết quả ở khối chọn select ở trong phải là 1 giá trị select <tên cột>,(select <tên cột> from <tên bảng>) from <tên bảng> Ví dụ: với dữ liệu của bảng BangDiem select ten as Ten, (select top 1 masv from BangDiem) as MaSV from BangDiem + Tạo định danh cho cột select <tên cột> as <tên cột mới> Vd: select MaSV as N’Mã sinh viên’ hoặc select MaSV as MSV from SinhVien + Có thể có lệnh chuyển case trong khối select VD: hiện thị tên sv, giới tính nếu là nữ hiển thị là 0 nam là 1 Ta có bảng thông tin sinh viên như sau:
  • 19. ANHMATTROI – TIN5A 19 select masv as N'Mã sinh viên', ten N'Tên sinh viên', ngaysinh as N'Ngày sinh', case gioitinh when N'Nam' then '1' else '0' end as N'Giới tính', que as N'Quê' from SinhVien - From <từ bảng nào> + Nếu lấy dữ liệu từ nhiều bảng bạn có thể tạo bí danh cho bảng ví dụ như: select a.MaSV, a.TenSV, b.DT from SinhVien a, DiemThi b where a.MaSV = b.MaSV Thay cho: select SinhVien.MaSV, SinhVien.TenSV, DiemThi.DT from SinhVien, DiemThi
  • 20. ANHMATTROI – TIN5A 20 where SinhVien.MaSV = DiemThi.MaSV + Lấy bản ghi từ khối chọn select bằng cách tạo định danh VD: select a.masv as N'Mã sinh viên' from ( select masv, ten from SinhVien ) as a - Where <điều kiện để lấy hay không lấy hàng này> Điều kiện ở mệnh đề where: + =,>,<,>=,<=,<>,!>,!<,!= giá trị ô của cột đó so sánh với giá trị nào đó Ví dụ: cho bảng điểm của sinh viên như sau:
  • 21. ANHMATTROI – TIN5A 21 Cho biết tên những sinh viên có điểm >= 7 select ten as N'Những sinh vien có điểm lớn hơn hoặc bằng 7' from @bang_a where diem >= 7 + not between/between <giá trị 1> and <giá trị 2>: giá trị của ô thuộc cột đó không/nằm từ giá trị 1 đến giá trị 2 và kiểu dữ liệu của hai giá trị đó là kiểu số(int, float, decimal, datetime,..) VD: cho biết những sinh viên có điểm trong khoảng [8,9] select ten as N'Tên sinh viên' from BangDiem where diem between 8 and 9 VD: những sinh viên có điểm không nằm trong khoảng [8,9] select ten as N'Tên sinh viên' from BangDiem where diem between 8 and 9
  • 22. ANHMATTROI – TIN5A 22 + like ‘%a%’ hoặc like ‘a%’ hoặc like ‘%a’ hoặc like ‘a_’ hoặc like ‘giá trị[kí tự]’: giá trị của ô thuộc bảng có kiểu chữ có chung kí tự VD: cho biết họ tên của những sinh viên có tên là Bình select ten as N'Tên sinh viên' from BangDiem where ten like N'%Bình' + and not(<tên cột> = ‘s’ or <tên cột> = ‘d’): và không phải là s hoặc d + in (a,b,…): hoặc là a hoặc là b + not in (a,b,…): không là a mà cũng không là b + all(a,b): là cả a và b + any/some(a,b): là giá trị nào đó + is null: dùng <tên cột> is null chứ không phải <tên cột> = null khi ô thuộc cột đó có giá trị null + exists/not exists: nếu khối chọn select ở mệnh đề where trả lại bản ghi rỗng/không rỗng thì lấy/không lấy hàng đang duyệt - Group by <gom nhóm theo cột nào> + Số cột cần đem gom nhóm ở group by phải >= số cột được chọn ở select(>=2) trừ đi 1
  • 23. ANHMATTROI – TIN5A 23 + Nếu có các hàm count/sum/avg/min/max(<tên cột>) ở select: những hàm này chỉ có tác dụng trên nhóm - Having <điền kiện> -- chỉ có tác dụng trên nhóm không có tác dụng đến toàn bảng - Order by <sắp xếp theo cột nào> asc/desc + asc: sắp xếp tăng dần(mặc định) + desc: sắp xếp giảm dần - Compute count/avg/min/max/sum(<tên cột>),… by <là một/nhiều trong các cột ở order by và thứ tự các cột phải giống như ở order by> + Bắt đầu từ hàng trên cùng đến cuối bảng của những cột sắp xếp ở order by tách lấy những hàng có giá trị trùng nhau: các lệnh ở compute sẽ thực hiện trên những phần đã tách ra + Đã có compute … by … phải có order by …. nếu compute không có by thì không compute sẽ thực hiện trên toàn bảng - Offset <nhảy mấy hàng từ trên xuống> rows - Fetch next <chỉ lấy mấy hàng> rows only - Thứ tự chạy các khối lệnh: khối lệnh from chạy đầu tiên -> khối lệnh where -> group by/order by -> …. -> cuối cùng là khối lệnh select - Nối kết quả của hai khối lệnh truy vấn bằng union hoặc union all, các cột ở kết quả hai khối truy vấn phải cùng kiểu dữ liệu. + Union: nối hai khối đó lại xong sắp xếp theo thứ tự từ điển, những giá trị bị trùng chỉ dữ lại một giá trị + Union all: chỉ nối khối 2 vào khối 1 xong không làm thay đổi gì select <tên cột> from <tên bảng 1> union/union all select <tên cột> from <tên bảng 2> Ví dụ: select masv from SinhVien union all
  • 24. ANHMATTROI – TIN5A 24 select tensv from SinhVien - Loại những giá trị bị trùng ở kết quả truy vấn của khối truy vấn 1 với giá trị ở kết quả truy vấn của khối truy vấn 2 (khối truy vấn 1) minus (khối truy vấn 2) Ví dụ: select hoten from SinhVien minus select hoten from SinhVien where masv = 10001 6. Biến và câu lệnh rẽ nhánh, vòng lặp - Biến + Khai báo biến: declare @<tên biến> <kiểu dữ liệu> Biến do người dùng khai báo luôn có @ trước tên biến, lúc khai báo có thể gán giá mặc định cho biến: declare @x int = 0, @y float = 1
  • 25. ANHMATTROI – TIN5A 25 + Gán giá trị: set @<tên biến> = <giá trị> Mỗi lần gán giá trị cho một biến là một set + Một số biến hệ thông thường dùng: biến hệ thống có hai chữ @@ trước tên biến và chỉ được dùng không thay đổi giá trị của nó theo ý muốn được + Con trỏ: khai báo declare @<khai báo các biến, số biến khai báo ở dòng này = số cột ở câu lệnh truy vấn ở dưới> declare <tên con trỏ không có @ ở trước tên biến> cursor for select <các cột số các cột = số các biến khai báo ở trên> from <tên bảng> ………………… open <tên con trỏ> fetch next from <tên con trỏ> into <thứ tự các biến phù hợp với các cột ở trên> while @@fetch_status = 0 begin @@fetch_status Số nguyên Nếu là 0 đọc thành công còn nếu không ngược lại @@connections Số nguyên Tổng số kết nối tới MSSQL @error Số nguyên Nếu là 0 không có lỗi còn nếu không tương ứng với các lỗi @@language Chuỗi Tên ngôn ngữ mà MSSQL đang sử dụng @@rowcount Số nguyên Tổng số mẫu tin được tác động vào câu lệnh truy vấn gần nhất @@servername Chuỗi Tên máy @@servicename Chuỗi Tên dịch vụ @@version Chuỗi Phiên bản MSSQL đang cài trên máy
  • 26. ANHMATTROI – TIN5A 26 <các lệnh lập trình/truy vấn> fetch next from <tên con trỏ> into <các biến> end close <tên con trỏ> deallocate <tên con trỏ> Ví dụ: khai báo biến @ToaDo có kiểu dữ liệu table chứa hai cột x, y sau đó duyệt bảng bằng con trỏ -- Tạo bảng ToaDo lưu tọa đọ của các điểm declare @ToaDo table ( x int, y int ) insert into @ToaDo values(1,2) insert into @ToaDo values(-3,2) insert into @ToaDo values(6,8) insert into @ToaDo values(2,4) insert into @ToaDo values(9,1) insert into @ToaDo values(12,5) -- Duyệt tọa độ các điểm declare @x int, @y int declare contro cursor for select x, y from @ToaDo open contro declare @i int = 1 fetch next from contro into @x, @y while @@FETCH_STATUS = 0 begin print N'Tọa độ điểm thứ ' + cast(@i as varchar(2)) + N' là: (' + cast(@x as varchar(2)) + ',' + cast(@y as varchar(2)) + ')' set @i = @i + 1 fetch next from contro into @x, @y end close contro deallocate contro
  • 27. ANHMATTROI – TIN5A 27 - Câu lệnh rẽ nhánh if … else if <điều kiện> begin <các lệnh -- nếu có một lệnh không cần begin end cũng được> end else begin <các lệnh> end + Nếu điều kiện ở khối if đúng thì các lệnh ở khối if chạy còn nếu sai thì các lệnh ở khối else chạy + Nếu chỉ cần các lệnh ở khối if chạy hay không thì không cần khối else Ví dụ: if 10>9 print N'Đúng' + Dùng exists, not exists trong if: nếu tồn tại hoặc không tồn tại Ví dụ: tạo cơ sở dữ liệu quản lí sinh viên có kiểm tra xem cơ sở dữ liệu đã có chưa. Nếu chưa có thì tạo cơ sở dữ liệu đó. Nếu có rồi thì hiện ra thông báo cơ sở dữ liệu này đã có rồi. use master if not exists(select 'true' from sys.databases where name = 'QLSV') begin create database QLSV on ( name = 'Quanlysinhvien', filename = 'C:Bai tapQuanlysinvien.mdf', size = 10mb, maxsize = 30mb, filegrowth = 5% ) log on ( name = 'Quanlysinhvien_log', filename = 'C:Bai tapQuanlysinvien_log.ldf',
  • 28. ANHMATTROI – TIN5A 28 size = 5mb, maxsize = 20mb, filegrowth = 5% ) end else print N'Cơ sở dữ liệu QLSV đã có rồi' Ví dụ: với bảng use QLSV if not exists(select * from QLSV.sys.objects where name = 'LopHoc') begin create table LopHoc ( malop nchar(30) constraint KhoaChinh primary key, tenlop nchar(20) not null, diadiem nchar(20) not null, magvql int not null ) end else print N'Bảng lớp học đã có rồi' Ví dụ: với view use QLSV if exists(select * from QLSV.sys.views where name = 'Diem_View') begin drop view Diem_View print N'Diem_View đã xóa thành công' end else print N'Diem_view không có trong cơ sở dữ liệu QLSV nên không xóa được' - Câu lệnh chuyển case case <tên cột/tên biến> when <nếu giá trị ở cột là x/của biến là x thì> then <thực hiện công việc gì đó> when <nếu giá trị ở cột là y/của biến là y thì> then <thực hiện công việc gì đó> else <nếu không phải là những giá trị ở các when thì thực hiện công việc> end VD: tạo biến có kiểu dữ liệu là bảng có một cột x lưu các số và kiểm tra các số này có chia hết cho 2 không
  • 29. ANHMATTROI – TIN5A 29 declare @a table ( x int not null ) insert into @a values(9) insert into @a values(2) insert into @a values(0) insert into @a values(1) insert into @a values(8) insert into @a values(2) ------------------------ select x,case x%2 when 0 then N'Có' else N'Không' end as N'Chia hết cho 2' from @a - Vòng lặp while while <điều kiện> begin <các lệnh> + nếu gặp lệnh continue ở đây sẽ bỏ qua những lệnh ở dưới continue và chuyển sang vòng lặp tiếp theo + nếu gặp break thì dừng hẳn vòng lặp + continue và break chỉ xuất hiện trong vòng lặp end VD: hiện thị các số từ 1 đến 15 nếu gặp số 6, 10 thì không hiện thị những số này declare @i int set @i = 1 print N'Các số i là' while @i<16 begin if @i=6 or @i=10 begin set @i = @i + 1
  • 30. ANHMATTROI – TIN5A 30 continue end print 'i = ' + cast(@i as varchar(3)) set @i = @i + 1 end VD: tìm ước chung lớn nhất của 112 va 68 print N'Ước chung lớn nhất của 112 và 68 là: ' declare @a int,@b int, @phandu int set @a = 112 set @b = 68 while 1>0 begin if @b=0 break set @phandu = @a%@b set @a = @b set @b = @phandu end print cast(@a as char(3)) 7. Thủ tục - Tạo thủ tục:
  • 31. ANHMATTROI – TIN5A 31 create procedure/proc <tên thủ tục>(<các biên tham số truyền vào output/out(không nhất thiết phải có)>) as with recompile/with encryption -- dòng này có hoặc không begin <các khối lệnh truy vấn ở đây> end + with recompile: mỗi lần gọi thủ tục – thủ tục sẽ biên dịch lại + with encryption: không xem được nội dung của thủ tục - Sửa thủ tục: Thay create bằng alter và bắt đầu thay đổi thủ tục đã tạo - Xóa thủ tục: drop procedure <tên thủ tục> - Lời gọi thủ tục: exec <tên thủ tục> <các tham số truyền vào> + Nếu tham số truyền vào khai báo ở lệnh tạo thủ tục là output/out thì các tham số truyền vào cũng bị thay đổi theo Ví dụ: Tạo thủ tục có tên CTGD_Ngay nhận ngày giao dịch là tham số truyền vào, hiện thị thông tin giao dịch ngày như: số tài khoản, loại giao dịch, số tiền giao dịch trong ngày đó và tổng số tiền theo từng loại giao dịch. Hiển thị tông tin giao dịch ngày 2-2-2012 create procedure CTGD_Ngay(@Ngay datetime) as begin select SoTK, LoaiGD, sum(SoTienGD) as N'Tổng số tiền giao dịch' from ChiTietGD where NgayGD = @Ngay group by SoTK, LoaiGD end exec CTGD_Ngay '2-2-2012'
  • 32. ANHMATTROI – TIN5A 32 8. Hàm - Tạo hàm + Dạng chung: create function <tên hàm>(<các tham số truyền vào>) returns <kiểu giá trị trả về> as begin <các câu lệnh truy vấn hoặc các lệnh lập trình> return <giá trị trả lại> end + Tạo hàm với kiểu giá trị trả lại là bảng: create function <tên hàm>(<các tham số truyền vào>) returns @<tên biến có kiểu dữ liệu bảng> table ( khai báo các biến ở đây những biến này phải có kiểu dữ liệu phù hợp với các cột được chọn ở khối lệnh select sẽ được định nghĩa ở dưới đây ) as begin insert into @<tên biến bảng ở trên> select <chọn các cột muốn gán cho các biến> from <lấy từ bảng nào> ……………… return end - Sửa hàm: Thay create bằng alter - Xóa hàm: drop function <tên hàm>
  • 33. ANHMATTROI – TIN5A 33 - Lời gọi hàm: + Với hàm trả lạ một giá trị select dbo.<tên hàm>(<truyền cho hàm những tham số nào>) Ví dụ: tạo hàm TienTK nhận số tài khoản là tham số truyền vào và trả về số tiền trong tai khoản này. In ra số tiền của tài khoản 9513 create function TienTK(@SoTK char(12)) returns int as begin return ( select SoTien from TaiKhoan where @SoTK = SoTK ) end declare @sotien int = 0 set @sotien = dbo.TienTK('9513') print N'Số dư: ' print @sotien + Với hàm trả lại một bảng dữ liệu select */…… from dbo.<tên hàm>(<các tham số truyền vào>) Ví dụ: tạo hàm CTTGD_TK nhận tham số truyền vào là số tài khoản và trả về bản ghi chứa thông tin sau: loại giao dịch, ngày giao dịch, số tiền giao dịch. Viêt lời gọi hàm cho tài khoản 9512 create function CTGD_TK(@SoTK char(12)) returns @Bang table ( LoaiGD char(3), NgayGD datetime, SoTienGD int ) as begin insert into @Bang select LoaiGD, NgayGD, SoTienGD from ChiTietGD
  • 34. ANHMATTROI – TIN5A 34 where @SoTK = SoTK return end select * from dbo.CTGD_TK(‘9512’)