mysql 数据库操作

-- 创建数据库
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 自增  每次插入新纪录,自动创建主键字段

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值