SQL Trong Mysql

Preview:

Citation preview

Lê Nguyên Sinh – HNUE

Cách thực thi các truy vấn SQL Các truy vấn làm việc với các CSDL Các truy vấn thao tác với bảng Các truy vấn thao tác với bản ghi

Cách 1: Truy vấn thông qua PHPMyAdmin

Cách 2: Truy vấn qua MySQL Console Cách 3: Truy vấn từ xa thông qua các

công cụ MySQL Client

Mở cửa sổ phpmyadmin:• http://localhost/phpmyadmin

Bật cửa sổ SQL• Biểu tượng cửa sổ SQL nằm bên cạnh biểu

tượng Home của phpmyadmin Nhập câu lệnh SQL và bấm OK.

Mở cửa sổ Command• Start->Run->cmd[Enter]

Chuyển tới thư mục chứa file mysql.exe• Cd c:\xampp\mysql\bin

Gọi file mysql với 2 tham số username và password:• Mysql –u root –p[Enter]

Nhập mật khẩu tương ứng với user Nhập các truy vấn SQL và bấm Enter để

thực thi

Cú pháp:• Show databases;

Cú pháp:• Create database tên_CSDL;

Ví dụ:• Create database vidu;

Chú ý: Để tạo CSDL hỗ trợ tiếng Việt với charset mặc định là UTF8:•CREATE DATABASE Tên_CSDL DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Cú pháp:• Drop database tên_CSDL;

Ví dụ:• Drop database vidu;

Cú pháp:• ALTER DATABASE Tên_CSDL 

DEFAULT CHARACTER SET utf8 

COLLATE tên_charset

Cú pháp:• Use tên_CSDL;

Chú ý: • Chỉ dùng trên MySQL Console• Không có tác dụng trên phpmyadmin

Các nội dung chính:• Xem danh sách bảng trong CSDL• Tạo bảng• Chỉnh sửa cấu trúc bảng• Tạo/xoá trường chỉ số (index)• Xoá bảng

Cú pháp:• Show tables [in database] [like ‘%tukhoa%’]

Ví dụ:• Show tables;• Show tables in vidu;• Show tables in vidu like ‘%lop%’;

Cú pháp:• CREATE TABLE tên_bảng (

Tên_trường_1 kiểu_dữ_liệu [(độ dài)] [Tham số],

Tên_trường_2 kiểu_dữ_liệu [(độ dài)] [Tham số],Tên_trường_3 kiểu_dữ_liệu [(độ dài)] [Tham số],

)Ví dụ:Create table baihat (id int

auto_increment primary key, name varchar(20))

Cú pháp:• SHOW COLUMNS FROM tên_bảng;

Cú pháp:• ALTER TABLE tên_bảng ADD COLUMN

tên_cột kiểu_dữ_liệu [Thông tin khác] Ví dụ:

• Alter table bai_hat add column tac_gia varchar (15);

Cú pháp:• ALTER TABLE tên_bảng CHANGE tên_cột_cũ

tên_cột_mới kiểu_dữ_liệu [Thông tin bổ sung]

Ví dụ:• Alter table bai_hat change tac_gia tacgia

varchar (20);

Cú pháp:• ALTER TABLE tên_bảng DROP tên_cột;

Cú pháp:• ALTER TABLE tên_bảng ADD INDEX

(tên_cột);

Cú pháp:• ALTER TABLE tên_bảng DROP INDEX tên cột

index

Cú pháp:• ALTER TABLE tên_cũ RENAME TO tên_mới

Cú pháp:• DROP TABLE tên_bảng;

Cú pháp:• INSERT INTO tên_bảng (trường1, trường2,…)

values (giá trị1, giá trị 2…) Chú ý:

• Số lượng và kiểu dữ liệu của các giá trị phải bằng số lượng và kiểu dữ liệu của các trường tương ứng

• Đối với các giá trị dạng chuỗi hoặc ngày tháng, thời gian thì cần phải bao quanh giá trị bởi cặp dấu nháy đơn, kiểu số thì không cần

• Đối với trường auto increment thì không cần khai báo tên trường cũng như giá trị tương ứng.

Cú pháp:• DELETE FROM tên_bảng WHERE điều_kiện

Cú pháp:• UPDATE tên_bảng SET cột1=giá trị1, cột 2=

giá trị 2… WHERE điều_kiện

Cú pháp cơ bản:• Select * from tên_bảng• Select * from tên_bảng where điều_kiện• Select trường1, trường2,… from tên_bảng

where điều_kiện

Là các phép so sánh trả về true/false Có thể kết hợp nhiều điều kiện qua các

phép toán and hoặc or Các điều kiện cơ bản:

• So sánh đơn giản• In, not in• Like• Between … and

Các điều kiện phức hợp: sử dụng kết hợp với các hàm hoặc các câu truy vấn lồng.

• Là các phép toán so sánh cơ bản: =, <>, >, <, <=, >=

• Ví dụ: Select * from nhanvien where luongcoban<3;

• Được sử dụng để kiểm tra giá trị có nằm trong một tập hợp cho trước hay không:

• Trả về true nếu như cột tìm kiếm có giá trị nằm trong (in) hoặc không nằm trong (not in) tập giá trị cho trước

• Ví dụ: Lấy danh sách các nhân viên có id nằm trong tập

2,3,4: Select * from nhanvien where id in (2,3,4)

Lấy danh sách nhân viên có id nằm ngoài tập 2,3,4: Select * from nhanvien where id not in (2,3,4)

• Được dùng để tìm kiếm theo từ khoá với các trường chuỗi.

• Cú pháp chung: LIKE ‘%từ_khoá%’ LIKE ‘%từ_khoá’ LIKE ‘từ_khoá%’

• Trả về các bản ghi có chứa các từ khoá ở các vị trí tương ứng.

• Ví dụ: Select * from nhanvien where hoten like

‘%Hương’;

• Trả về các bản ghi có giá trị của trường nằm giữa hai giá trị xác định

• Cú pháp: Between x and y

• Ví dụ: Select * from nhanvien where manhanvien

between 2 and 20;

Sử dụng từ khoá order by sau where:• Order by trường_1 asc|desc trường_2 asc|

desc Ví dụ

• Select * from nhanvien where hoten like ‘%Hương’ order by ngaysinh desc

Sử dụng để loại bỏ các bản ghi có các giá trị trùng nhau

Cú pháp:• Select distinct trường1, trường 2… from

tên_bảng Ví dụ:

• Select distinct hoten, ngaysinh from nhanvien

Sử dụng để gom nhóm và loại bỏ các bản ghi trùng nhau

Có thể kết hợp với các hàm khác Cú pháp:

• Select * from tên_bảng where điều_kiện group by tên_trường

Ví dụ: • Lấy danh sách các bản ghi có user_id=1 và

nhóm theo trường user_id (chỉ ra duy nhất 1 bản ghi):

• SELECT * from user_group where user_id=1 group by user_id

Cho phép thiết lập điều kiện thay vì dùng where

Có thể kết hợp với group by Cú pháp: having điều_kiện Ví dụ:

• Select * from users having id>10

Cú pháp: limit x, y• X: Bản ghi bắt đầu• Y: Số bản ghi cần lấy

Ví dụ:• Select * from users limit 4,20;

Select distinct From Where Group by Having Order by Limit

Cách 1: Truy vấn trực tiếp• Select trường1, trường2,.. From bảng1, bảng 2…

Cách 2: Sử dụng phép toán JOIN• SELECT bảng1.trường1, bảng2.trường2,

bảng1.trường2…• FROM bảng1 LEFT JOIN|INNER JOIN| RIGHT JOIN bảng 2• ON điều_kiện_nối• WHERE các điều kiện khác• …

Ví dụ:• Select user.name, group.name from user inner join

group on group.user_id=user.id where user.name like ‘%abc%’

Cho phép đặt tên trường, bảng… bằng bí danh (alias)

Giúp cho truy vấn ngắn gọn hơn Giảm thiểu sự nhập nhằng giữa các

trường trùng tên trên các bảng khác nhau Sử dụng: tên trường|bảng AS bí_danh Ví dụ:

• Select a.name as username, b.name as groupname from user as a inner join group as b on a.user_id=b.id where a.name like ‘%abc%’

Cho phép sử dụng một câu lệnh SQL trong một câu lệnh SQL khác

Câu lệnh SQL con phải trả kết quả phù hợp với ngữ cảnh sử dụng

Có thể dùng câu lệnh SQL con như là một bảng ảo

Ví dụ:• Select ten from (select * from users where

id>4) as bangmoi• Select * from users where id in (select user_id

from groups where group_id=4)

Cho phép nối nhiều câu lệnh SQL lại với nhau để cho ra một tập bản ghi trả về duy nhất

Cú pháp:• Sql1 UNION sql2 UNION sql3…

Chú ý: Số lượng và kiểu dữ liệu của các trường trong các truy vấn sql1, sql2, sql3… phải tương xứng nhau

VD:• Select ten from users UNION select name from

groups.