MySql基础4
2016-12-28 23:56
405 查看
CREATE TABLE cms_type( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, tname VARCHAR(30) NOT NULL UNIQUE ); --给cms_type表 添加数据 INSERT cms_type(tname) VALUE ('国内'), ('国际'), ('体育'), ('娱乐'); -- cms_article 新闻表表结构 CREATE TABLE cms_article( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, title VARCHAR(80) NOT NULL, contents TEXT NOT NULL, tid SMALLINT UNSIGNED NOT NULL, aid SMALLINT UNSIGNED NOT NULL, addtime TIMESTAMP NOT NULL DEFAULT current_timestamp ); -- 新闻分类 1.国内 2 国际 3 体育 4 娱乐 --给cms_article表 添加数据 INSERT cms_article(title,contents,tid,aid) VALUE ('首相“恩怨”:卡梅伦和特雷莎曾就“脱欧”不合','首相“恩怨”:卡梅伦和特雷莎曾就“脱欧”不合',2,1), ('华裔女子枪战悍匪获网友点赞 在美华裔安全引担忧','华裔女子枪战悍匪获网友点赞 在美华裔安全引担忧',2,1), ('习近平:努力建设一支强大的现代化火箭军','习近平:努力建设一支强大的现代化火箭军',1,1), ('人民日报评论:失去奋斗,房产再多我们也将无家可归','人民日报评论:失去奋斗,房产再多我们也将无家可归',1,1), ('奥运会女排','奥运会女排金牌',3,2), ('篮球','篮球',3,2), ('小沈阳','小沈阳',4,2), ('快乐大本营','快乐大本营',4,2); -- 多表联合查询 cms_admin cms_type cms_article -- 字段 :新闻编号 新闻标题 分类名称 管理员名称 新闻发布时间 SELECT ar.id,ar.title,t.tname, ad.aname,ar.addtime FROM cms_article AS ar INNER JOIN cms_admin AS ad ON ar.aid = ad.id INNER JOIN cms_type AS t ON ar.tid = t.id; ------------------------------------------------------------------------------- -- 用 左外链接联合查询 LEFT JOIN -- 左表 : cms_prov 右表:cms_user --以左表为主,把cms_prov全部罗列出来 -- 字段 : name pname SELECT u.name,p.pname FROM cms_prov AS p LEFT JOIN cms_user AS u ON u.address = p.id; -- 用 右外链接联合查询 RIGHT JOIN -- 左表 : cms_user 右表:cms_prov --以左表为主,把cms_prov全部罗列出来 -- 字段 : name pname SELECT u.name,p.pname FROM cms_user AS u RIGHT JOIN cms_prov AS p ON u.address = p.id; ------------------------------------------------------------------------------- --子查询使用 -- (1)WHERE -- a.IN -- 查询 地址名称是 广州的记录 -- 1. cms_prov 广州名称对应的编号 SELECT id FROM cms_prov WHERE pname = '广州'; -- 2.cms_user 地址名称是 广州的记录 SELECT * FROM cms_user WHERE address IN(SELECT id FROM cms_prov WHERE pname = '广州'); -- 查询 地址名称是 上海,广州的记录 SELECT * FROM cms_user WHERE address IN(SELECT id FROM cms_prov WHERE pname='上海' OR pname='广州'); -- (1)WHERE -- b.比较运算符 -- 查询 age 中大于平均年龄的 记录 -- 1.查询平均年龄 SELECT AVG(age) FROM cms_user; -- 2.查询 age 中大于平均年龄的 记录 SELECT * FROM cms_user WHERE age>(SELECT AVG(age) FROM cms_user); -- 查询 age 中大于(18,19)的 记录,>all大于最大值,大于19 SELECT * FROM cms_user WHERE age>ALL(SELECT age FROM cms_user WHERE age IN(18,19)); -- =SOME/ANY 等同于 IN -- 查询 age 中等于(18,19)的 记录 SELECT * FROM cms_user WHERE age=SOME(SELECT age FROM cms_user WHERE age IN(18,19)); -- FROM:FROM 后除了跟表还可以跟子查询产生的新表 SELECT * FROM (SELECT name,age FROM cms_user) AS new; ------------------------------------------------------------------------------- -- 表约束 -- 设置两个字段同时为主键 -- aa bb --CREATE TABLE test( -- aa INT PRIMARY KEY, -- bb INT PRIMARY KEY -- ); 错误的 产生两个主键 -- 设置两个字段同时为主键 CREATE TABLE test( aa INT, bb INT, PRIMARY KEY(aa,bb)--aa,bb是不能加引号的 ); -- 再加 (1,1) 主键重复 :主键中两个值同时相同才叫重复 --两个主键一对相同才叫重复 INSERT test(aa,bb) VALUE (1,1), (1,2), (2,1); ------------------------------------------------------------------------------- -- 创建 父表 person -- id pname CREATE TABLE person( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, pname VARCHAR(30) NOT NULL )ENGINE=InnoDB DEFAULT CHARSET=utf8;--两个表都要写这句话 INSERT person(pname) VALUE ('a'), ('b'), ('c'), ('d'); -- 创建 子表 (外键表)son -- id sname pid CREATE TABLE son( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, sname VARCHAR(30) NOT NULL, pid SMALLINT UNSIGNED NOT NULL, FOREIGN KEY(pid) REFERENCES person(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;--两个表都要写这句话 -- 先有参考表记录,后有外键表(子表)记录 -- 外键列只能添加 person 中编号 1 2 3 4 -- 能不能 添加 ('tina',6); INSERT son(sname,pid) VALUE ('tom',1), ('rose',2), ('alice',4); INSERT son(sname,pid) VALUE ('toam',6); -- 先删外键表(子表)记录,后删参考表(父表)记录 -- 父表不能删除 子表中使用的值记录 DELETE FROM person WHERE id=1; ------------------------------------------------------------------------------- -- 逻辑外键 原理:父表和子表是一个表 -- 创建无限极菜单分类表 category -- 字段 id(父表id) name菜单名称 pid(外键列) -- 当前菜单的 id 是下一级菜单的 pid -- 当前菜单的pid 上一级菜单的id CREATE TABLE category( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, name VARCHAR(30) NOT NULL, pid SMALLINT UNSIGNED NOT NULL );` INSERT category(name,pid) VALUE 1('家用电器',0), 2('手机,数码',0), 3('电脑,办公',0), 4('电视',1), 5('空调',1), 6('洗衣机',1), 7('厨卫大电',1), 8('合资品牌',4), 9('国产品牌',4), 10('壁挂式空调',5), 11('柜式空调',5), 12('滚筒洗衣机',6), 13('洗烘一体衣机',6), ('TCL',9), ('乐视',9); -- 查询 当前菜单名称 ,父级菜单信息的所有记录 SELECT s.name,p.name FROM category AS s INNER JOIN (SELECT * FROM category) AS p ON s.pid=p.id;
相关文章推荐
- PHP 和 MySQL 基础教程(四)
- PHP、MySQL最基础的教程
- 数据库基础系列之一:MySQL账户
- PHP 和 MySQL 基础教程(一)
- MySQL基础入门-03MySQL的安装和配置
- PHP 和 MySQL 基础教程(四)
- MySQL基础
- PHP 和 MySQL 基础教程(一)
- PHP 和 MySQL 基础教程(三)
- MySQL基础指令
- PHP 和 MySQL 基础教程(三)
- MySQL的基础入门体会(一)(downmoon)
- Mysql-JDBC基础
- PHP 和 MySQL 基础教程(四)
- [MySQL基础]MySQL入门指南
- PHP 和 MySQL 基础教程(二)
- PHP 和 MySQL 基础教程(二)
- PHP 和 MySQL 基础教程(四)
- MySQL基础入门-02数据库概述及MySQL简介
- MySQL基础入门-04MySQL的启动和连接