To login (from unix shell) use -h only if needed.
# [mysql dir]/bin/mysql -h hostname -u root -pCreate a database on the sql server.
mysql> create database [databasename];List all databases on the sql server.
mysql> show databases;Switch to a database.
mysql> use [db name];To see all the tables in the db.
mysql> show tables;To see database's field formats.
mysql> describe [table name];To delete a db.
mysql> drop database [database name];To delete a table.
mysql> drop table [table name];Show all data in a table.
mysql> SELECT * FROM [table name];Returns the columns and column information pertaining to the designated table.
mysql> show columns from [table name];Show certain selected rows with the value "whatever".
mysql> SELECT * FROM [table name] WHERE [field name] = "whatever";Show all records containing the name "Bob" AND the phone number '3444444'.
mysql> SELECT * FROM [table name] WHERE name = "Bob" AND phone_number = '3444444';Show all records not containing the name "Bob" AND the phone number '3444444' order by the phone_number field.
mysql> SELECT * FROM [table name] WHERE name != "Bob" AND phone_number = '3444444' order by phone_number;Show all records starting with the letters 'bob' AND the phone number '3444444'.
mysql> SELECT * FROM [table name] WHERE name like "Bob%" AND phone_number = '3444444';Show all records starting with the letters 'bob' AND the phone number '3444444' limit to records 1 through 5.
mysql> SELECT * FROM [table name] WHERE name like "Bob%" AND phone_number = '3444444' limit 1,5;Use a regular expression to find records. Use "REGEXP BINARY" to force case-sensitivity. This finds any record beginning with a.
mysql> SELECT * FROM [table name] WHERE rec RLIKE "^a";Show unique records.
mysql> SELECT DISTINCT [column name] FROM [table name];Show selected records sorted in an ascending (asc) or descending (desc).
mysql> SELECT [col1],[col2] FROM [table name] ORDER BY [col2] DESC;Return number of rows.
mysql> SELECT COUNT(*) FROM [table name];Sum column.
mysql> SELECT SUM(*) FROM [table name];Join tables on common columns.
mysql> select lookup.illustrationid, lookup.personid,person.birthday from lookup left join person on lookup.personid=person.personid=statement to join birthday in person table with primary illustration id;Creating a new user. Login as root. Switch to the MySQL db. Make the user. Update privs.
# mysql -u root -p mysql> use mysql; mysql> INSERT INTO user (Host,User,Password) VALUES('%','username',PASSWORD('password')); mysql> flush privileges;Change a users password from unix shell.
# [mysql dir]/bin/mysqladmin -u username -h hostname.blah.org -p password 'new-password'Change a users password from MySQL prompt. Login as root. Set the password. Update privs.
# mysql -u root -p mysql> SET PASSWORD FOR 'user'@'hostname' = PASSWORD('passwordhere'); mysql> flush privileges;Recover a MySQL root password. Stop the MySQL server process. Start again with no grant tables. Login to MySQL as root. Set new password. Exit MySQL and restart MySQL server.
# /etc/init.d/mysql stop # mysqld_safe --skip-grant-tables & # mysql -u root mysql> use mysql; mysql> update user set password=PASSWORD("newrootpassword") where User='root'; mysql> flush privileges; mysql> quit # /etc/init.d/mysql stop # /etc/init.d/mysql startSet a root password if there is on root password.
# mysqladmin -u root password newpasswordUpdate a root password.
# mysqladmin -u root -p oldpassword newpasswordAllow the user "bob" to connect to the server from localhost using the password "passwd". Login as root. Switch to the MySQL db. Give privs. Update privs.
# mysql -u root -p mysql> use mysql; mysql> grant usage on *.* to bob@localhost identified by 'passwd'; mysql> flush privileges;Give user privilages for a db. Login as root. Switch to the MySQL db. Grant privs. Update privs.
# mysql -u root -p mysql> use mysql; mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES ('%','databasename','username','Y','Y','Y','Y','Y','N'); mysql> flush privileges; or mysql> grant all privileges on databasename.* to username@localhost; mysql> flush privileges;To update info already in a table.
mysql> UPDATE [table name] SET Select_priv = 'Y',Insert_priv = 'Y',Update_priv = 'Y' where [field name] = 'user';Delete a row(s) from a table.
mysql> DELETE from [table name] where [field name] = 'whatever';Update database permissions/privilages.
mysql> flush privileges;Delete a column.
mysql> alter table [table name] drop column [column name];Add a new column to db.
mysql> alter table [table name] add column [new column name] varchar (20);Change column name.
mysql> alter table [table name] change [old column name] [new column name] varchar (50);Make a unique column so you get no dupes.
mysql> alter table [table name] add unique ([column name]);Make a column bigger.
mysql> alter table [table name] modify [column name] VARCHAR(3);Delete unique from table.
mysql> alter table [table name] drop index [colmn name];Load a CSV file into a table.
mysql> LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);Dump all databases for backup. Backup file is sql commands to recreate all db's.
# [mysql dir]/bin/mysqldump -u root -ppassword --opt >/tmp/alldatabases.sqlDump one database for backup.
# [mysql dir]/bin/mysqldump -u username -ppassword --databases databasename >/tmp/databasename.sqlDump a table from a database.
# [mysql dir]/bin/mysqldump -c -u username -ppassword databasename tablename > /tmp/databasename.tablename.sqlRestore database (or database table) from backup.
# [mysql dir]/bin/mysql -u username -ppassword databasename < /tmp/databasename.sqlCreate Table Example 1.
mysql> CREATE TABLE [table name] (firstname VARCHAR(20), middleinitial VARCHAR(3), lastname VARCHAR(35),suffix VARCHAR(3),officeid VARCHAR(10),userid VARCHAR(15),username VARCHAR(8),email VARCHAR(35),phone VARCHAR(25), groups VARCHAR(15),datestamp DATE,timestamp time,pgpemail VARCHAR(255));Create Table Example 2.
mysql> create table [table name] (personid int(50) not null auto_increment primary key,firstname varchar(35),middlename varchar(50),lastnamevarchar(50) default 'bato');MYSQL Statements and clausessource :http://www.pantz.org/software/mysql/mysqlcommands.html
ALTER DATABASE ALTER TABLE ALTER VIEW ANALYZE TABLE BACKUP TABLE CACHE INDEX CHANGE MASTER TO CHECK TABLE CHECKSUM TABLE COMMIT CREATE DATABASE CREATE INDEX CREATE TABLE CREATE VIEW DELETE DESCRIBE DO DROP DATABASE DROP INDEX DROP TABLE DROP USER DROP VIEW EXPLAIN FLUSH GRANT HANDLER INSERT JOIN KILL LOAD DATA FROM MASTER LOAD DATA INFILE LOAD INDEX INTO CACHE LOAD TABLE...FROM MASTER LOCK TABLES OPTIMIZE TABLE PURGE MASTER LOGS RENAME TABLE REPAIR TABLE REPLACE RESET RESET MASTER RESET SLAVE RESTORE TABLE REVOKE ROLLBACK ROLLBACK TO SAVEPOINT SAVEPOINT SELECT SET SET PASSWORD SET SQL_LOG_BIN SET TRANSACTION SHOW BINLOG EVENTS SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW CREATE DATABASE SHOW CREATE TABLE SHOW CREATE VIEW SHOW DATABASES SHOW ENGINES SHOW ERRORS SHOW GRANTS SHOW INDEX SHOW INNODB STATUS SHOW LOGS SHOW MASTER LOGS SHOW MASTER STATUS SHOW PRIVILEGES SHOW PROCESSLIST SHOW SLAVE HOSTS SHOW SLAVE STATUS SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES SHOW WARNINGS START SLAVE START TRANSACTION STOP SLAVE TRUNCATE TABLE UNION UNLOCK TABLES USEString Functions
AES_DECRYPT AES_ENCRYPT ASCII BIN BINARY BIT_LENGTH CHAR CHAR_LENGTH CHARACTER_LENGTH COMPRESS CONCAT CONCAT_WS CONV DECODE DES_DECRYPT DES_ENCRYPT ELT ENCODE ENCRYPT EXPORT_SET FIELD FIND_IN_SET HEX INET_ATON INET_NTOA INSERT INSTR LCASE LEFT LENGTH LOAD_FILE LOCATE LOWER LPAD LTRIM MAKE_SET MATCH AGAINST MD5 MID OCT OCTET_LENGTH OLD_PASSWORD ORD PASSWORD POSITION QUOTE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SHA SHA1 SOUNDEX SPACE STRCMP SUBSTRING SUBSTRING_INDEX TRIM UCASE UNCOMPRESS UNCOMPRESSED_LENGTH UNHEX UPPERDate and Time Functions
ADDDATE ADDTIME CONVERT_TZ CURDATE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURTIME DATE DATE_ADD DATE_FORMAT DATE_SUB DATEDIFF DAY DAYNAME DAYOFMONTH DAYOFWEEK DAYOFYEAR EXTRACT FROM_DAYS FROM_UNIXTIME GET_FORMAT HOUR LAST_DAY LOCALTIME LOCALTIMESTAMP MAKEDATE MAKETIME MICROSECOND MINUTE MONTH MONTHNAME NOW PERIOD_ADD PERIOD_DIFF QUARTER SEC_TO_TIME SECOND STR_TO_DATE SUBDATE SUBTIME SYSDATE TIME TIMEDIFF TIMESTAMP TIMESTAMPDIFF TIMESTAMPADD TIME_FORMAT TIME_TO_SEC TO_DAYS UNIX_TIMESTAMP UTC_DATE UTC_TIME UTC_TIMESTAMP WEEK WEEKDAY WEEKOFYEAR YEAR YEARWEEKMathematical and Aggregate Functions
ABS ACOS ASIN ATAN ATAN2 AVG BIT_AND BIT_OR BIT_XOR CEIL CEILING COS COT COUNT CRC32 DEGREES EXP FLOOR FORMAT GREATEST GROUP_CONCAT LEAST LN LOG LOG2 LOG10 MAX MIN MOD PI POW POWER RADIANS RAND ROUND SIGN SIN SQRT STD STDDEV SUM TAN TRUNCATE VARIANCEFlow Control Functions
CASE IF IFNULL NULLIFCommand-Line Utilities
comp_err isamchk make_binary_distribution msql2mysql my_print_defaults myisamchk myisamlog myisampack mysqlaccess mysqladmin mysqlbinlog mysqlbug mysqlcheck mysqldump mysqldumpslow mysqlhotcopy mysqlimport mysqlshow perrorPerl API - using functions and methods built into the Perl DBI with MySQL
available_drivers begin_work bind_col bind_columns bind_param bind_param_array bind_param_inout can clone column_info commit connect connect_cached data_sources disconnect do dump_results err errstr execute execute_array execute_for_fetch fetch fetchall_arrayref fetchall_hashref fetchrow_array fetchrow_arrayref fetchrow_hashref finish foreign_key_info func get_info installed_versions last_insert_id looks_like_number neat neat_list parse_dsn parse_trace_flag parse_trace_flags ping prepare prepare_cached primary_key primary_key_info quote quote_identifier rollback rows selectall_arrayref selectall_hashref selectcol_arrayref selectrow_array selectrow_arrayref selectrow_hashref set_err state table_info table_info_all tables trace trace_msg type_info type_info_all Attributes for HandlesPHP API - using functions built into PHP with MySQL
mysql_affected_rows mysql_change_user mysql_client_encoding mysql_close mysql_connect mysql_create_db mysql_data_seek mysql_db_name mysql_db_query mysql_drop_db mysql_errno mysql_error mysql_escape_string mysql_fetch_array mysql_fetch_assoc mysql_fetch_field mysql_fetch_lengths mysql_fetch_object mysql_fetch_row mysql_field_flags mysql_field_len mysql_field_name mysql_field_seek mysql_field_table mysql_field_type mysql_free_result mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_processes mysql_list_tables mysql_num_fields mysql_num_rows mysql_pconnect mysql_ping mysql_query mysql_real_escape_string mysql_result mysql_select_db mysql_stat mysql_tablename mysql_thread_id mysql_unbuffered_query
Tôi không phải hacker, nhưng tôi đam mê hack... I not hacker, but i passion hack... TrungTrucT2@gmail.com
Nhãn
- Lập Trình SQL (20)
- Kỹ Thuật Hacking (13)
- Phim (13)
- Google Hack (10)
- TinKode (7)
- Bug (4)
- List SQL (4)
- New Internet (4)
- Anh 3 Ngọc Sơn (3)
- TàoLao (3)
- My Video (2)
- Software (1)
Hiển thị các bài đăng có nhãn Lập Trình SQL. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Lập Trình SQL. Hiển thị tất cả bài đăng
Chủ Nhật, 25 tháng 3, 2012
MySQL Commands
Thứ Tư, 7 tháng 9, 2011
Ebooks SQL sever tiếng việt
SQL là viết tắt của Structured Query Language Ngôn ngữ truy vấn có cấu trúc, là một chuẩn của ANSI (American National Standards Institute – Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL. Các câu lệnh SQL được sử dụng để truy xuất và cập nhật dữ liệu trong một CSDL.
Các đặc tính của SQL sever:
* SQL cho phép bạn truy cập vào CSDL.
* SQL là một chuẩn ngôn ngữ của ANSI.
* SQL có thể thực thi các câu truy vấn trên CSDL.
* SQL có thể lấy dữ liệu từ CSDL.
* SQL có thể chèn dữ liệu mới vào CSDL.
* SQL có thể xoá dữ liệu trong CSDL.
* SQL có thể sửa đổi dữ liệu hiện có trong CSDL.
* SQL về cơ bản là dễ học. Nếu có ai có thời gian để nghiên cứu chuyên sâu về nó. Thì rất tốt và hữu dụng cho việc lập trình.
Các phiên bản SQL: Trải qua nhiều lần thử nghiệm thì SQL đã từng bước nâng cấp và cập nhật . Các tính năng ngày càng hoàn thiện hơn. Để đáp ứng cho nhu cầu lập trình cho Lập trình viên tốt hơn.
SQL 2000
SQL 2005
SQL 2008
SQL 2010 (là phiên bản chưa chính thức, tích hợp đi cùng bộ VS studio 2010 hiện đang có phiên bản beta).
Các tài liệu về SQL bằng tiếng anh thì có rất nhiều trên mạng, các bạn có thể vào trực tiếp trang web của nhà cung cấp MS để có những trợ giúp tốt hơn. Những ebook bằng tiếng việt thì chỉ có tài liệu về SQL sever 2000, là nhiều.
Sau đây là 1 Số tài liệu về SQL sever bằng tiếng Việt mà mình đã sưu tầm được:
1. Hệ Quản Trị Cơ Sở Dữ Liệu SQL Sever HP5_ĐHTN: Đây là CD giáo trình của trường đai học Tự Nhiên thành phố Hồ Chí Minh.
2. Hướng dẫn cơ bản để tạo 1 cơ sở dữ liệu với SQL sever
3. Giáo Trình SQL sever của trường Đại học Khoa học Huế
4. Giáo Trình SQL sever của trường Đại học Thủy Lợi
5. Quản trị và phát triển ứng dụng với MS SQL sever: Tài liệu của học viện kỹ thuật Quân sự.
6. Giáo trình thực hành SQL Của Thầy Trần Nguyên Phong.
7.Tự học SQL sever 2000
8.Huong dan su dung SQL Server
9.Giáo trình SQL sever 2005 Giáo trình của trường đại Học Huế.
Phần mềm: SQL server 2005
Thứ Hai, 5 tháng 9, 2011
Tạo database với phpmyadmin
http://thegioivitinh.wordpress.com/
Đầu tiên vào cpanel.
Sau đó bấm vào MySQL database hoặc tương tự như thế.
Vào giao diện của MySQL có 3 phần chính:
1)Create MySQL database
Tạo database: tuy bạn có ý tạo db tên là betobe nhưng khi thành nó sẽ là freecode_betobe
Điều này giải thích là nó lấy username_của_mình_trên_host_lam_tiền_tố
2)Create MySQL user
Tạo username cũng tương tự, ví dụ khi tạo là vnit thì user ra là freecode_vnit
Password: nhớ kỹ pass cũa user, password thì ko kèm tiền tố :D
3)Grant permissions on a MySQL database to a MySQL user
Tức là gán quyền cho user vào db. Sau khi bạn tạo user và db xong thì nó sẽ đựoc hiện trong 2 combo box: username và database (có bao nhiêu user và db thì hiện ra hết)
Bạn chọn một_user_nào_đó và gán quyền cho database_nào_đó và quyền_nào_đó :D
Nếu bạn chưa hiểu thì xem cái hình kèm theo, ở đây là user ninhthua_online được gán toàn quyền(ALL) cho db tên ninhthua_nuke. Sau đó bấm nút Grant Permission thôi. Nếu sau này bạn tạo nhiều user và db quá mà ko biết user nào được gán cho db nào với quyền nào thì có thể xem đoạn code này thi vào MySQL:
ninhthua_online (Privileges: ALL PRIVILEGES)
Connection Strings
Perl $dbh = DBI->connect(“DBI:mysql:ninhthua_nuke:localhost”,”ninhthua_online”,”<PASSWORD HERE>”);
PHP $dbh=mysql_connect (“localhost”, “ninhthua_online”, “<PASSWORD HERE>”) or die (‘I cannot connect to the database because: ‘ . mysql_error());
mysql_select_db (“ninhthua_nuke”);
Sau đó bấm vào MySQL database hoặc tương tự như thế.
Vào giao diện của MySQL có 3 phần chính:
1)Create MySQL database
Tạo database: tuy bạn có ý tạo db tên là betobe nhưng khi thành nó sẽ là freecode_betobe
Điều này giải thích là nó lấy username_của_mình_trên_host_lam_tiền_tố
2)Create MySQL user
Tạo username cũng tương tự, ví dụ khi tạo là vnit thì user ra là freecode_vnit
Password: nhớ kỹ pass cũa user, password thì ko kèm tiền tố :D
3)Grant permissions on a MySQL database to a MySQL user
Tức là gán quyền cho user vào db. Sau khi bạn tạo user và db xong thì nó sẽ đựoc hiện trong 2 combo box: username và database (có bao nhiêu user và db thì hiện ra hết)
Bạn chọn một_user_nào_đó và gán quyền cho database_nào_đó và quyền_nào_đó :D
Nếu bạn chưa hiểu thì xem cái hình kèm theo, ở đây là user ninhthua_online được gán toàn quyền(ALL) cho db tên ninhthua_nuke. Sau đó bấm nút Grant Permission thôi. Nếu sau này bạn tạo nhiều user và db quá mà ko biết user nào được gán cho db nào với quyền nào thì có thể xem đoạn code này thi vào MySQL:
ninhthua_online (Privileges: ALL PRIVILEGES)
Connection Strings
Perl $dbh = DBI->connect(“DBI:mysql:ninhthua_nuke:localhost”,”ninhthua_online”,”<PASSWORD HERE>”);
PHP $dbh=mysql_connect (“localhost”, “ninhthua_online”, “<PASSWORD HERE>”) or die (‘I cannot connect to the database because: ‘ . mysql_error());
mysql_select_db (“ninhthua_nuke”);
Trên localhost:
phpMyAdmin là một ứng dụng quản trị cơ sở dữ liệu rất phổ biến hiện
nay. Để có thể quản trị các cơ sở dữ liệu của mình bạn cần đăng nhập
bằng Username và Password đã tạo ra ở bước setup hệ thống. Mặc định
Username đăng nhập ở localhost sẽ là root

Sau khi đăng nhập bạn có thể sử dụng phần mềm quản trị cơ sở dữ liệu phpMyAdmin. Phía bên trái hình mô tả bên dưới là danh sách các database hiện bạn đang có (đã tạo). Để thao tác với database nào bạn chọn nó từ danh sách này. Phía bên phải là khung tạo database mới – đây là cái chúng ta sẽ sử dụng để tạo database cho các ứng dụng sắp cài đặt.
Công việc rất đơn giản: chỉ cần gõ tên database muốn tạo và nhấn Create là xong

Sau khi tạo dựng Database xong bạn sẽ thấy database này của mình trong danh sách các database ở mục trái. Tuy nhiên hiện nay chưa có table nào cả vì chúng ta chưa tạo cài dặt source code đi kèm với nó.

Tới đây công việc tạo database đã xong để bạn có thể chép source code của bạn vào thư mục www\ và tiến hành cài đặt với database này được rồi.
Note: nhắc lại một lần nữa là đây là cách tạo database trên localhost. Về căn bản tạo database trên hosting thật sự không giống như vậy mặc dù nó cũng sử dụng phpMyAdmin. Tạo database trên hosting phụ thuộc vào hosting bạn sử dụng và cơ chế phân quyền riêng.
Sau khi đăng nhập bạn có thể sử dụng phần mềm quản trị cơ sở dữ liệu phpMyAdmin. Phía bên trái hình mô tả bên dưới là danh sách các database hiện bạn đang có (đã tạo). Để thao tác với database nào bạn chọn nó từ danh sách này. Phía bên phải là khung tạo database mới – đây là cái chúng ta sẽ sử dụng để tạo database cho các ứng dụng sắp cài đặt.
Công việc rất đơn giản: chỉ cần gõ tên database muốn tạo và nhấn Create là xong
Sau khi tạo dựng Database xong bạn sẽ thấy database này của mình trong danh sách các database ở mục trái. Tuy nhiên hiện nay chưa có table nào cả vì chúng ta chưa tạo cài dặt source code đi kèm với nó.
Tới đây công việc tạo database đã xong để bạn có thể chép source code của bạn vào thư mục www\ và tiến hành cài đặt với database này được rồi.
Note: nhắc lại một lần nữa là đây là cách tạo database trên localhost. Về căn bản tạo database trên hosting thật sự không giống như vậy mặc dù nó cũng sử dụng phpMyAdmin. Tạo database trên hosting phụ thuộc vào hosting bạn sử dụng và cơ chế phân quyền riêng.
Thay đổi cấu trúc bảng trong SQL (SQL Phần 17)
http://thegioivitinh.wordpress.com
Thay đổi cấu trúc bảng.
Câu lệnh ALTER TABLE được sử dụng để thêm hoặc xoá cột trong một bảng.
Ví dụ: ta có bảng Person như sau:
Thêm một cột tên là City vào bảng Person:
Xoá cột Address:
Thay đổi cấu trúc bảng.
Câu lệnh ALTER TABLE được sử dụng để thêm hoặc xoá cột trong một bảng.
Lưu ý: Một số hệ CSDL không cho phép việc xoá bỏ cột trong bảng.ALTER TABLE tên_bảng
ADD tên_cột kiểu_dữ_liệu
ALTER TABLE tên_bảng
DROP COLUMN tên_cột
Ví dụ: ta có bảng Person như sau:
| LastName | FirstName | Address |
|---|---|---|
| Pettersen | Kari | Storgt 20 |
ALTER TABLE Person ADD City varchar(30)
kết quả:| LastName | FirstName | Address | City |
|---|---|---|---|
| Pettersen | Kari | Storgt 20 |
ALTER TABLE Person DROP COLUMN Address
kết quả:| LastName | FirstName | City |
|---|---|---|
| Pettersen | Kari |
Tạo một CSDL trong SQL (SQL Phần 16)
http://thegioivitinh.wordpress.com
Tạo một CSDL
Tạo một CSDL
CREATE DATABASE tên_CSDL
Tạo một bảng trong một CSDL
CREATE TABLE tên_bảng
(
tên_cột_1 kiểu_dữ_liệu,
tên_cột_2 kiểu_dữ_liệu,
.......
)
Ví dụ
Tạo một bảng tên Person có bốn cột: LastName, FirstName, Address và Age:
CREATE TABLE Person
(
LastName varchar,
FirstName varchar,
Address varchar,
Age int
)
Tạo bảng và đặt kích thước tối đa của các cột:
CREATE TABLE Person
(
LastName varchar(30),
FirstName varchar,
Address varchar,
Age int(3)
)
Kiểu dữ liệu sẽ qui định loại dữ liệu nào được phép lưu trữ trong cột. Sau đây là các kiểu dữ liệu thường dùng nhất trong SQL:
integer(n) |
Chỉ lưu trữ dữ liệu là số nguyên. Số lượng tối đa các chữ số được qui định bởi n. |
decimal(n,d) |
Lưu trữ số thập nhân. Số lượng tối đa các chữ số được qui định bởi n. Số lượng tối đa các chữ số sau dấu phảy thập phân được qui định bởi d. |
char(n) |
Lưu trữ n ký tự. |
varchar(n) |
Lưu trữ tối đa n ký tự. |
date(yyyymmdd) |
Lưu trữ ngày tháng (dạng năm-tháng-ngày) |
Tạo chỉ mục
Chỉ mục được tạo ra nhằm để các dòng trong bảng được truy
xuất nhanh và hiệu quả hơn. Chỉ mục có thể được tạo trên một hoặc nhiều
cột của bảng, và mỗi chỉ mục được đặt một tên. Người dùng không thấy
được các chỉ mục này, chúng chỉ được dùng để tăng tốc cho CSDL.
Lưu ý: Sau
khi bảng đã được tạo chỉ mục thì việc cập nhật thay thêm dòng mới vào
bảng sẽ mất nhiều thời gian hơn là đối với bảng không có chỉ mục. Lý do
là vì khi cập nhật bảng, các chỉ mục đồng thời cũng phải được cập nhật
theo. Vì thế, ta chỉ nên tạo chỉ mục cho các cột thường xuyên dùng trong
các tác vụ tìm kiếm.
Chỉ mục đơn nhất (Unique Index)
Chỉ mục đơn nhất sẽ bắt buộc hai dòng bất kỳ của bảng sẽ không được phép mang cùng giá trị ở cột được tạo chỉ mục.
Cú pháp:
CREATE UNIQUE INDEX tên_chỉ_mục
ON tên_bảng (tên_cột)
Chỉ mục đơn (Simple Index)
Khi không dùng từ khoá
UNIQUE trong câu lệnh tạo chỉ mục, các giá trị trùng nhau trong cột sẽ được phép.
Cú pháp:
CREATE INDEX tên_chỉ_mục
ON tên_bảng (tên_cột)
Ví dụ
Tạo một chỉ mục đơn có tên là PersonIndex trên cột LastName của bảng Person:
CREATE INDEXPersonIndex
ON Person (LastName)
Nếu bạn muốn tạo chỉ mục sắp xếp giảm dần, bạn sử dụng thêm từ dành riêng
DESC:CREATE INDEXPersonIndex
ON Person (LastNameDESC)
Nếu bạn muốn tạo chỉ mục trên nhiều cột:
CREATE INDEXPersonIndex
ON Person (LastName, Firstname)
Xoá chỉ mục
Bạn có thể xoá chỉ mục đã tạo bằng lệnh
DROP.DROP INDEX tên_bảng.tên_chỉ_mục
Xoá CSDL hoặc bảng
Để xoá một CSDL (các bảng trong CSDL cũng đồng thời được xoá):
DROP DATABASE tên_CSDL
Để xoá một bảng (toàn bộ cấu trúc, dữ liệu và chỉ mục của bảng sẽ được xoá):
DROP TABLE tên_bảng
Nối kết và khoá trong SQL (SQL Phần 15)
http://thegioivitinh.wordpress.com
Nối kết và khoá
Đôi khi chúng ta phải lấy dữ liệu từ hai bảng cùng một lúc, chúng ta thực hiện một kết nối.
Các bảng trong CSDL có thể quan hệ ràng buộc với nhau thông qua các khoá. Một khoá chính (primary key) là một cột mà trong đó mỗi giá trị của hàng phải là duy nhất. Mục đích của khoá là kết nối dữ liệu lại với nhau, từ nhiều bảng khác nhau mà không gây trùng lắp dữ liệu giữa các bảng.
Trong bảng Employees (nhân viên) ở ví dụ dưới đây có cột Employees_ID là khoá chính, bảo đảm rằng không thể có hai dòng nào có trùng Employees_ID. Employees_ID dùng để phân biệt hai nhân viên khi họ trùng tên.
Trong ví dụ dưới đây:
Bảng Orders:
Kết nối hai bảng với nhau
Chúng ta có thể lấy dữ liệu từ hai bảng bằng cách kết nối chúng, tương tự như sau:
Ví dụ: Tìm xem ai đã đặt hàng sản phẩm và họ đã đặt món hàng gì:
Ví dụ: Tìm xem ai đã đặt hàng máy in:
Sử dụng
Ta có thể sử dụng từ khoá JOIN để kết nối dữ liệu từ hai bảng.
Ví dụ:
Cú pháp:
kết quả trả về:
Ví dụ:
Cú pháp:
kết quả trả về:
Ví dụ:
Cú pháp:
kết quả trả về:
Ví dụ: Ai đã đặt hàng máy in:
Nối kết và khoá
Đôi khi chúng ta phải lấy dữ liệu từ hai bảng cùng một lúc, chúng ta thực hiện một kết nối.
Các bảng trong CSDL có thể quan hệ ràng buộc với nhau thông qua các khoá. Một khoá chính (primary key) là một cột mà trong đó mỗi giá trị của hàng phải là duy nhất. Mục đích của khoá là kết nối dữ liệu lại với nhau, từ nhiều bảng khác nhau mà không gây trùng lắp dữ liệu giữa các bảng.
Trong bảng Employees (nhân viên) ở ví dụ dưới đây có cột Employees_ID là khoá chính, bảo đảm rằng không thể có hai dòng nào có trùng Employees_ID. Employees_ID dùng để phân biệt hai nhân viên khi họ trùng tên.
Trong ví dụ dưới đây:
- Employee_ID là khoá chính của bảng Employees.
- Prod_ID là khoá chính của bảng Orders.
- Cột Employeed_ID trong bảng Orders được sử dụng để kết nối với bảng Employees, chỉ đến nhân viên trong bảng Employees.
| Employees_ID | Name |
|---|---|
| 01 | Hansen, Ola |
| 02 | Svendson, Tove |
| 03 | Svendson, Stephen |
| 04 | Pettersen, Kari |
| Prod_ID | Product | Employee_ID |
|---|---|---|
| 234 | Printer | 01 |
| 657 | Table | 03 |
| 865 | Chair | 03 |
Chúng ta có thể lấy dữ liệu từ hai bảng bằng cách kết nối chúng, tương tự như sau:
Ví dụ: Tìm xem ai đã đặt hàng sản phẩm và họ đã đặt món hàng gì:
SELECT Employees.Name, Orders.Product
FROM Employees, Orders
WHERE Employees.Employee_ID = Orders.Employee_ID
kết quả trả về:| Name | Product |
|---|---|
| Hansen, Ola | Printer |
| Svendson, Stephen | Table |
| Svendson, Stephen | Chair |
SELECT Employees.Name
FROM Employees, Orders
WHERE Employees.Employee_ID = Orders.Employee_ID
AND Orders.Product = 'Printer'
kết quả trả về:| Name |
|---|
| Hansen, Ola |
JOINTa có thể sử dụng từ khoá JOIN để kết nối dữ liệu từ hai bảng.
Ví dụ:
INNER JOINCú pháp:
SELECT cột_1, cột_2, cột_3
FROM bảng_1
INNER JOIN bảng_2
ON bảng_1.khoá_chính = bảng_2.khoá_ngoại
Ai đã đặt hàng và họ đã đặt món hàng nào:
SELECT Employees.Name, Orders.Product
FROM Employees
INNER JOIN Orders
ON Employees.Employee_ID = Orders.Employee_ID
INNER JOIN trả về tất cả các dòng ở cả hai bảng khi chúng tương ứng với nhau. Nếu có một dòng ở bảng Employees không ứng với dòng nào ở bảng Orders, dòng đó sẽ không được tính.kết quả trả về:
| Name | Product |
|---|---|
| Hansen, Ola | Printer |
| Svendson, Stephen | Table |
| Svendson, Stephen | Chair |
LEFT JOINCú pháp:
SELECT cột_1, cột_2, cột_3
FROM bảng_1
LEFT JOIN bảng_2
ON bảng_1.khoá_chính = bảng_2.khoá_ngoại
Liệt kê tất cả các nhân viên và món hàng mà họ đặt (nếu có):
SELECT Employees.Name, Orders.Product
FROM Employees
LEFT JOIN Orders
ON Employees.Employee_ID = Orders.Employee_ID
LEFT JOIN trả về tất cả các dòng của bảng thứ nhất (Employees), ngay cả khi các dòng đó không ứng với dòng nào ở bảng thứ hai (Orders). Nếu có một dòng nào ở bảng Employees không ứng với bất cứ dòng nào ở bảng Orders thì dòng đó cũng vẫn được tính.kết quả trả về:
| Name | Product |
|---|---|
| Hansen, Ola | Printer |
| Svendson, Tove | |
| Svendson, Stephen | Table |
| Svendson, Stephen | Chair |
| Pettersen, Kari |
RIGHT JOINCú pháp:
SELECT cột_1, cột_2, cột_3
FROM bảng_1
RIGHT JOIN bảng_2
ON bảng_1.khoá_chính = bảng_2.khoá_ngoại
Liệt kê tất cả các mặt hàng được đặt và tên người đặt hàng (nếu có):
SELECT Employees.Name, Orders.Product
FROM Employees
RIGHT JOIN Orders
ON Employees.Employee_ID = Orders.Employee_ID
RIGHT JOIN trả về tất cả các dòng ở bảng thứ hai (Orders), ngay cả khi các dòng đó không ứng với dòng nào ở bảng thứ nhất (Employees). Nếu có một dòng nào ở bảng Orders không ứng với bất cứ dòng nào ở bảng Employees thì dòng đó cũng vẫn được tính.kết quả trả về:
| Name | Product |
|---|---|
| Hansen, Ola | Printer |
| Svendson, Stephen | Table |
| Svendson, Stephen | Chair |
SELECT Employees.Name
FROM Employees
INNER JOIN Orders
ON Employees.Employee_ID = Orders.Employee_ID
WHERE Orders.Product = 'Printer'
kết quả trả về:| Name |
|---|
| Hansen, Ola |
Sử dụng bí danh trong SQL (SQL Phần 14)
http://thegioivitinh.wordpress.com
Với SQL, bí danh có thể được sử dụng cho tên của cột và tên của bảng.Bí danh cột:
Cú pháp bí danh cột như sau:
Bí danh bảng có cú pháp như sau:
Ta có bảng Persons như sau:
Câu lệnh SQL sau:
Với SQL, bí danh có thể được sử dụng cho tên của cột và tên của bảng.Bí danh cột:
Cú pháp bí danh cột như sau:
SELECT tên_cột AS bí_danh_cột FROM tên_bảng
Bí danh bảng:Bí danh bảng có cú pháp như sau:
SELECT tên_cột FROM tên_bảng AS bí_danh_bảng
Ví dụ sử dụng bí danh cột:Ta có bảng Persons như sau:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Hansen | Ola | Timoteivn 10 | Sandnes |
| Svendson | Tove | Borgvn 23 | Sandnes |
| Pettersen | Kari | Storgt 20 | Stavanger |
SELECT LastName AS Họ, FirstName AS Tên
FROM Persons
Sẽ trả về kết quả:| Họ | Tên |
|---|---|
| Hansen | Ola |
| Svendson | Tove |
| Pettersen | Kari |
Mệnh đề GROUP BY, mệnh đề HAVING trong SQL (SQL Phần 13)
http://thegioivitinh.wordpress.com
Các hàm tập hợp (ví dụ như
SUM) thông thường cần thêm chức năng của mệnh đề GROUP BY.GROUP BY…Mệnh đề
GROUP BY…được thêm vào SQL bởi vì các hàm tập hợp (như SUM)
trả về một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và
nếu không có GROUP BY ta không thể nào tính được tổng của các giá trị
theo từng nhóm riêng lẻ trong cột.Cú pháp của
GROUP BY như sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột
Ví dụ sử dụng GROUP BY:Giả sử ta có bảng Sales như sau:
| Company | Amount |
|---|---|
| W3Schools | 5500 |
| IBM | 4500 |
| W3Schools | 7100 |
SELECT Company, SUM(Amount) FROM Sales
sẽ trả về kết quả:| Company | SUM(Amount) |
|---|---|
| W3Schools | 17100 |
| IBM | 17100 |
| W3Schools | 17100 |
GROUP BY vào trong câu lệnh SQL:
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company
và kết quả trả về lần này sẽ là:| Company | SUM(Amount) |
|---|---|
| W3Schools | 12600 |
| IBM | 4500 |
HAVING…Mệnh đề
HAVING…được thêm vào SQL vì mệnh đề WHERE không áp dụng được đối với các hàm tập hợp (như SUM). Nếu không có HAVING, ta không thể nào kiểm tra được điều kiện với các hàm tập hợp.Cú pháp của
HAVING như sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảng
GROUP BY tên_cột
HAVING SUM(tên_cột) điều_kiện giá_trị
Ta sử dụng lại bảng Sales ở trên. Câu lệnh SQL sau:
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company
HAVING SUM(Amount) > 10000
Hàm tính toán AVG, MAX, MIN, SUM trong SQL (SQL Phần 12)
http://thegioivitinh.wordpress.com
SQL có sẵn khá nhiều hàm để thực hiện đếm và tính toán.
Cú pháp:
Cú pháp để gọi hàm trong câu lệnh SQL như sau:
Hàm
Hàm
Ví dụ:
Câu lệnh sau sẽ tính số tuổi trung bình của những người có tuổi trên 20:
Hàm
Ví dụ:
Hàm
Ví dụ:
Hàm
Hàm SUM trả về tổng giá trị của cột. Các giá trị
Ví dụ:
Tìm tổng số tuổi của tất cả những người có trong bảng:
Tìm tổng số tuổi của tất cả những người có tuổi lớn hơn 20:
SQL có sẵn khá nhiều hàm để thực hiện đếm và tính toán.
Cú pháp:
Cú pháp để gọi hàm trong câu lệnh SQL như sau:
SELECT function(tên_cột) FROM tên_bảng
Bảng dữ liệu chúng ta sẽ dùng trong các ví sụ tiếp theo:| Name | Age |
|---|---|
| Hansen, Ola | 34 |
| Svendson, Tove | 45 |
| Pettersen, Kari | 19 |
AVG(column)Hàm
AVG trả về giá trị trung bình tính theo cột được chỉ định của các dòng được chọn. Các giá trị NULL sẽ không được xét đến khi tính giá trị trung bình.Ví dụ:
Câu lệnh sau sẽ tính số tuổi trung bình của những người có tuổi trên 20:
SELECT AVG(Age) FROM Persons WHERE Age > 20
kết quả trả về sẽ là:
39.5
Hàm MAX(column)Hàm
MAX trả về giá trị lớn nhất trong cột. Các giá trị NULL sẽ không được xét đến.Ví dụ:
SELECT MAX(Age) FROM Persons
kết quả trả về:
45
Hàm MIN(column)Hàm
MAX trả về giá trị nhỏ nhất trong cột. Các giá trị NULL sẽ không được xét đến.Ví dụ:
SELECT MIN(Age) FROM Persons
kết quả trả về:
19
Lưu ý: Hàm MIN và MAX cũng có thể áp dụng cho các cột có dữ liệu là chuỗi văn bản. Dữ liệu trong cột sẽ được so sánh theo thứ tự tăng dần của từ điểnHàm
SUM(column)Hàm SUM trả về tổng giá trị của cột. Các giá trị
NULL sẽ không được xét đến.Ví dụ:
Tìm tổng số tuổi của tất cả những người có trong bảng:
SELECT SUM(Age) FROM Persons
kết quả trả về:
98
Ví dụ:Tìm tổng số tuổi của tất cả những người có tuổi lớn hơn 20:
SELECT SUM(Age) FROM Persons WHERE Age > 20
kết quả trả về:
79
Hàm COUNT lệnh đếm trong SQL (SQL Phần 11)
http://thegioivitinh.wordpress.com
SQL có sẵn lệnh để đếm các dòng trong CSDL.
Cú pháp của hàm
COUNT:
SELECT COUNT(tên_cột) FROM tên_bảng
Hàm COUNT(*):Hàm
COUNT(*) trả về số lượng các dòng được chọn ở trong bảng.Ví dụ ta có bảng Persons như sau:
| Name | Age |
|---|---|
| Hansen, Ola | 34 |
| Svendson, Tove | 45 |
| Pettersen, Kari | 19 |
SELECT COUNT(*) FROM Persons
và kết quả trả về sẽ là:
3
Câu lệnh sau sẽ trả về số lượng những người lớn hơn 20 tuổi:
SELECT COUNT(*) FROM Persons WHERE Age > 20
kết quả trả về sẽ là:
2
Hàm COUNT(column):Hàm
COUNT(column) sẽ trả về số lượng các dòng có giá trị khác NULL ở cột được chỉ định.Ví dụ ta có bảng Persons như sau:
| Name | Age |
|---|---|
| Hansen, Ola | 34 |
| Svendson, Tove | 45 |
| Pettersen, Kari |
SELECT COUNT(Age) FROM Persons
và kết quả trả về sẽ là:
2
Mệnh đề COUNT DISTINCTLưu ý: Các ví dụ dưới đây chỉ hoạt động với CSDL Oracle và MS SQL Server, không hoạt động trên MS Access (chưa thử nhiệm với các hệ CSDL khác!)
Từ khoá DISTINCT và COUNT có thể được dùng chung với nhau để đếm số lượng các kết quả không trùng nhau.
Cú pháp như sau:
SELECT COUNT(DISTINCT column(s)) FROM table
Ví dụ ta có bảng Orders như sau:| Company | OrderNumber |
|---|---|
| Sega | 3412 |
| W3Schools | 2312 |
| Trio | 4678 |
| W3Schools | 6798 |
SELECT COUNT(DISTINCT Company) FROM Orders
sẽ trả về kết quả là:
3
Đăng ký:
Bài đăng (Atom)