-- 创建数据库
CREATE DATABASE RUNOOB ;
-- 删除数据库
DROP DATABASE RUNOOB ;
-- 使用数据库
USE runoob ;
-- 设置编码
SET NAMES utf8 ;
-- 查询
SELECT * FROM websites ;
SELECT NAME,country FROM websites ;
-- distinct DISTINCT 关键词用于返回唯一不同的值 (唯一值 不允许重复)
SELECT DISTINCT country FROM websites ;
-- where 字句 where 条件
SELECT * FROM websites WHERE country = 'CN' ;
-- and or
SELECT * FROM websites WHERE country = 'CN' AND alexa > 50 ;
SELECT * FROM websites WHERE country = 'CN' OR country = 'USA' ;
SELECT * FROM websites WHERE alexa > 50 AND ( country = 'CN' OR country = 'USA' );
-- order by 对结果集进行排序
SELECT * FROM websites ORDER BY alexa ;
SELECT * FROM websites ORDER BY alexa ASC ;
SELECT * FROM websites ORDER BY alexa DESC ;
SELECT * FROM websites ORDER BY country,alexa ;
-- 插入 insert into
INSERT INTO websites VALUES (
NULL,'百度','https://www.baidu.com/','4','CN'
);
INSERT INTO Websites (NAME, url, country)
VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
-- update 更新表记录
UPDATE websites SET alexa = '5000' , country = 'USA' WHERE NAME = '菜鸟教程';
-- delete 删除表记录
DELETE FROM websites WHERE NAME = '百度' AND country = 'CN' ;
-- limit 限制数目
SELECT * FROM websites LIMIT 2 ;
-- like 操作符
-- "%" 符号用于在模式的前后定义通配符(缺省字母)
SELECT * FROM websites WHERE NAME LIKE 'G%';
--
SELECT * FROM websites WHERE NAME LIKE '%K';
SELECT * FROM websites WHERE NAME LIKE '%oo%';
-- in 操作符允许在 where字句中规定多个值
SELECT * FROM websites WHERE NAME IN ('Google','菜鸟教程');
-- between 操作符 用于选取两个值之间的数据范围的值
SELECT * FROM websites WHERE alexa BETWEEN 1 AND 20 ;
-- not between 显示不在实例范围的值
SELECT * FROM websites WHERE alexa NOT BETWEEN 1 AND 20 ;
SELECT * FROM websites WHERE ( alexa BETWEEN 1 AND 20 ) AND country NOT IN ('USA','IND');
--
SELECT * FROM access_log WHERE DATE BETWEEN '2016-05-10' AND '2016-05-14' ;
-- sql 别名 使用sql 可以为表名或列名 指定别名
-- 创建别名是为了让列名称的可读性更强
SELECT * FROM access_log ;
SELECT NAME AS n , country AS c FROM websites ;
-- concat
SELECT NAME,CONCAT ( url,',',alexa,',',country ) AS site_info FROM websites ;
-- 选取 "菜鸟教程" 的所访问记录。我们使用 "Websites" 和 "access_log" 表,并分别为它们指定表别名 "w" 和 "a"
SELECT w.name ,w.url,a.count ,a.date FROM websites AS w ,access_log AS a WHERE a.site_id = w.id AND w.name = '菜鸟教程' ;
-- join 用于把多个表结合起来
-- inner join 内连接
SELECT * FROM access_log ;
SELECT w.id , w.name ,a.count,a.date FROM websites AS w INNER JOIN access_log AS a ON w.id = a.site_id ;
-- INNER JOIN:如果表中有至少一个匹配,则返回行
-- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
-- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
-- FULL JOIN:只要其中一个表中存在匹配,则返回行
SELECT w.name , a.count , a.date FROM websites AS w INNER JOIN access_log AS a ON w.id = a.site_id ORDER BY a.count ASC ;
SELECT w.name , a.count , a.date FROM websites AS w INNER JOIN access_log AS a ON w.id = a.site_id ORDER BY a.count DESC ;
-- 下面的 SQL 语句将返回所有网站及他们的访问量(如果有的话)。
-- 以下实例中我们把 Websites 作为左表,access_log 作为右表:
SELECT * FROM websites LEFT JOIN access_log ON websites.id = access_log.site_id ORDER BY access_log.count DESC;
SELECT w.name ,a.count,a.date FROM access_log AS a
RIGHT JOIN websites AS w ON a.site_id = w.id ORDER BY a.count DESC ;
-- union 操作符合并多个select 语句的结果集
-- 去重
SELECT country FROM websites
UNION
SELECT country FROM apps
ORDER BY country ;
-- 选取所有值 (包括重复值
SELECT country FROM websites
UNION ALL
SELECT country FROM apps
ORDER BY country ;
-- 使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值):
SELECT country,NAME FROM websites WHERE country = 'CN'
UNION ALL
SELECT country,app_name FROM apps WHERE country = 'CN'
ORDER BY country ;
-- select into 语句从一个表复制数据 ,然后把数据插入到另一个新表中
-- MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。
CREATE TABLE w_sites
AS
SELECT * FROM websites ;
-- 从一个表复制信息到另一个表。
-- INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
INSERT INTO websites (NAME,country )
SELECT app_name ,country FROM apps ;
-- SQL 约束用于规定表中的数据规则。
-- 如果存在违反约束的数据行为,行为会被约束终止。
-- 约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
-- not null 某列不能存储null值
-- unique 保证某列的某行必须有唯一的值
-- primary key not null 和unique的结合 确保某列有唯一标识 ,有助于快速查找表中记录
-- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
-- CHECK - 保证列中的值符合指定的条件。
-- DEFAULT - 规定没有给列赋值时的默认值。
-- check 约束用于限制列中值得范围
-- 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
-- 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
CREATE TABLE Persons(
P_ID INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255) ,
Address VARCHAR(255),
City VARCHAR(255),
CHECK (P_ID > 0)
)
DESC Persons ;
-- create index 语句用于在表中创建索引
-- 在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值
CREATE INDEX PIndex ON Persons(LastName , FirstName);
-- 使用drop语句 可以轻松的删除索引 表 和数据库
-- drop index 索引值
-- drop table 表名
-- drop database 库名
-- 如果仅仅删除表中数据 而不删除表结构
-- truncate table 表名
-- alter table 用于在已有的表中添加 删除 或 修改列
-- auto_increment 自增 每次插入新纪录,自动创建主键字段