Date和DateTime:数据要加单引号!

数据库插入日期不能用varchar型,要用Date/DateTime类型!

数据约束:对用户操作表的数据进行约束!

当用户对使用默认值的字段不插入值的时候,就使用默认值!

//DEFAULT‘山东淄博’

CREATE TABLE USER(

UID INT,

UNAME VARCHAR(10),

UADRESS VARCHAR(30) DEFAULT'天上人间'

)

SELECT * FROM USER

INSERT INTO USER(UID,UNAME) VALUES (001,'嫖一生')

INSERT INTO USER VALUES (002,'骚猪','东莞一霸')

//如果写成这样:INSERT INTO USER VALUES (001,'嫖一生')

//会报以下错误:

Column count doesn't match value count at row 1

//应该写成这样:

INSERT INTO USER(UID,UNAME) VALUES (001,'嫖一生')

①   对默认值字段插入NULL是可以的(可以DEFAULT'NULL',也可以DEFAULT'天上人间'时INSERT INTO一个NULL值)!

②   对默认值字段可以插入非NULL!

非空约束:NOT NULL

CREATE TABLE USER(

UID INT NOT NULL,

UNAME VARCHAR(10),

UADRESS VARCHAR(30) DEFAULT'天上人间'

)

//设置UID插入时不能为NULL值!

如果按照这样插入值的话:

INSERT INTO USER(UNAME,UADRESS) VALUES('咣咣','山东济南');

会报以下错:

Field 'UID' doesn't have a default value!

INSERT INTO USER VALUES(NULL,'哈哈','山东青岛');

//会报错:Column 'UID' cannot be null!

唯一约束:对字段的值不能重复!

CREATE TABLE USER(

UID INT UNIQUE,

UNAME VARCHAR(10),

UADRESS VARCHAR(30) DEFAULT'天上人间'

)

//创建表指定UID字段唯一约束!

//以下插入一条数据:

INSERT INTO USER VALUES(001,'张三','美国拉斯维加斯');

//重复插入第二遍的时候,提示:

Duplicate entry '1' for key 'UID'(重复为UID字段插入1,代表UID设置了UNIQUE约束)!

主键:非空+唯一

①   通常情况下,每张表都会设置一个主键字段,用于标记表中的每条记录的唯一性!

②   建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的ID字段!

//一个表内只能有一个主键!

CREATE TABLE USER(

UID INT PRIMARY KEY,

UNAME VARCHAR(10),

UADRESS VARCHAR(30) DEFAULT'天上人间'

)

//执行以下语句:

INSERT INTO USER(UNAME,UADRESS) VALUES('李四','美国洛杉矶');

//会报以下错误:

Field 'UID' doesn't have a default value!

//执行以下语句两次,第一次成功,第二次报错:

INSERT INTO USER VALUES(001,'张三','美国拉斯维加斯');

//会报以下错误:

Duplicate entry '1' for key 'PRIMARY'

标识种子+标识自增量:

自增列必须要是一个主键!

//如果执行以下代码:

CREATE TABLE USER(

UID INT AUTO_INCREMENT,

UNAME VARCHAR(10),

UADRESS VARCHAR(30) DEFAULT'天上人间'

)

//会报错,原因上面已经写了:

Incorrect table definition; there can be only one auto column and it must be defined as a key!

//同一个INSERT INTO执行3遍:

INSERT INTO USER(UNAME,UADRESS) VALUES('李四','美国洛杉矶');

会产生以下效果(按顺序自动加入UID):

//如果DELETE这个ID是3的,然后再INSERT INTO以下,数据会从4开始!

ZEROFILL:用0填充,这样的话INT数据类型必须要有一个精度!

//执行以下建表语句:

CREATE TABLE USER(

UID INT(3) ZEROFILL,

UNAME VARCHAR(10),

UADRESS VARCHAR(30) DEFAULT'天上人间'

)

//执行INSERT INTO语句,出现以下效果:

INSERT INTO USER VALUES(1,'李四','美国洛杉矶');

建表ID建议定义成VARCHAR型!

//不能影响自增长约束

DELETE FROM USER;

//可以影响自增长约束

TRUNCATE TABLE USER;

外键:约束两个表的数据,说白了就是别的表的主键!

解决数据冗余高问题: 独立出一张表!

//外键的前提:必须是别的表的主键,才能拿过来作为自己的外键!

//这个表的外键,与依赖表的主键,数据类型必须一致,名字建议也一致!

//建立部门表:

CREATE TABLE DEPT(

DEPTID INT PRIMARY KEY,

DEPTNAME VARCHAR(10)

)

//建立员工表,并设置部门表的主键为自己表的外键:

CREATE TABLE EMPER(

EMPID INT,

EMPNAME VARCHAR(10),

DEPTID INT,

CONSTRAINT EMPER_DEPT_FK FOREIGN KEY (DEPTID) REFERENCES DEPT(DEPTID)

)

//为部门表插入数据:

INSERT INTO DEPT VALUES(1,'开发部');

INSERT INTO DEPT VALUES(2,'实施部');

INSERT INTO DEPT VALUES(3,'运维部');

//为员工表插入数据:

INSERT INTO EMPER VALUES(123,'张三',1);

INSERT INTO EMPER VALUES(456,'李四',2);

INSERT INTO EMPER VALUES(789,'王五',3);

//检查一下是否正确:

SELECT * FROM DEPT

SELECT * FROM EMPER

//如果添加一个DEPT表内没有的DEPTID给EMPER:

INSERT INTO EMPER VALUES(321,'赵六',4);

//会报以下错误:

Cannot add or update a child row: a foreign key constraint fails (`testa`.`emper`, CONSTRAINT `EMPER_DEPT_FK` FOREIGN KEY (`DEPTID`) REFERENCES `dept` (`DEPTID`))

//绕过EMPER表,修改DEPT表可以成功:

UPDATE DEPT SET DEPTNAME ='运营部' WHERE DEPTID=3

//绕过EMPER表,删除DEPT表的数据:

DELETE FROM DEPT WHERE DEPTID=2

//会报以下错误:

Cannot delete or update a parent row: a foreign key constraint fails (`testa`.`emper`, CONSTRAINT `EMPER_DEPT_FK` FOREIGN KEY (`DEPTID`) REFERENCES `dept` (`DEPTID`))

被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!

主表的参考字段通用为主键!

添加数据: 先添加主表,再添加副表

修改数据: 先修改副表,再修改主表(针对于主键/外键字段)

删除数据: 先删除副表,再删除主表

 

CROSS JOIN:SELECT * FROM PRODUCT AS A CROSS JOIN PRODUCT_TYPE AS B

INNER JOIN:SELECT * FROM PRODUCT AS A INNER JOIN PRODUCT_TYPE AS B ON A.PROTYPE_ID=B.PROTYPE_ID

LEFT JOIN:SELECT * FROM PRODUCT AS A LEFT JOIN PRODUCT_TYPE AS B ON A.PROTYPE_ID=B.PROTYPE_ID

RIGHT JOIN:SELECT * FROM PRODUCT AS A RIGHT JOIN PRODUCT_TYPE AS B ON A.PROTYPE_ID=B.PROTYPE_ID

MYSQL内不支持FULL JOIN!

//查出索尼4G手机的类别:

SELECT * FROM PRODUCT AS A INNER JOIN PRODUCT_TYPE AS B ON A.PROTYPE_ID=B.PROTYPE_ID WHERE A.PINPAI='索尼' AND A.PRO_NAME LIKE '%手机%'

//查出所有产品类型为手机数码的产品:

SELECT * FROM PRODUCT AS A INNER JOIN PRODUCT_TYPE AS B ON A.PROTYPE_ID=B.PROTYPE_ID WHERE B.PROTYPE_NAME='手机数码'

//子查询:一个查询作为另一个查询的条件!

SELECT * FROM PRODUCT WHERE PROTYPE_ID IN (SELECT PROTYPE_ID FROM PRODUCT_TYPE WHERE PROTYPE_NAME='手机数码')

//如果要对整个联合结果进行排序或LIMIT,则应该对各自的SELECT语句加括号:

(SELECT语句1)

UNION

(SELECT语句2)

ORDER BY.....

LIMIT....

=号:一个值!

IN:一个范围!

转载于:https://www.cnblogs.com/postgredingdangniu/p/9296074.html

2018-07-11CROSS JOIN+INNER JOIN+LEFT JOIN+RIGHT JOIN相关推荐

  1. mysql join order by_MySQL 14 慢查询优化join、order by、group by

    1.慢查询的优化思路 1.1优化更需要优化的SQL 优化SQL是有成本的 高并发低消耗的比低并发高消耗影响更大 优化示例 并发形式 优化前 假设优化后 高并发低消耗 每小时10000次,每次20个IO ...

  2. java进阶 线程池 join用法总结:thread4.join();方法,就表明thread4.join();这个线程受到贵客待遇,直到这个线程执行完,被插入这个方法的载体线程才可以执行。

    那个线程调用join 举例 thread4.join();方法,就表明thread4.join();这个线程受到贵客待遇,直到这个线程执行完,被插入这个方法的载体线程才可以执行. package ja ...

  3. oracle full outer join,oracle 内连接(inner join)、外连接(outer join)、全连接(full join)...

    建表语句: create table EMPLOYEE ( EID NUMBER, DEPTID NUMBER, ENAME VARCHAR2(200) ) create table DEPT ( D ...

  4. java join()源码_Java Thread的join() 之刨根问底

    0.Join() 线程的合并的含义就是 将几个并行线程的线程合并为一个单线程执行,应用场景是 当一个线程必须等待另一个线程执行完毕才能执行时,Thread类提供了join方法来完成这个功能,注意,它不 ...

  5. SQL 中 left join 的底层原理(各种JOIN的复杂度探究)

    01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null.除了 left ...

  6. mysql默认join是什么类型_MySQL:join语句类型

    MySQL:join语句类型 join从句的类型有以下几种: 内链接(inner) 右外连接(right outer) 左外连接(left outer) 全外连接(full outer) 交叉链接(c ...

  7. left join 和join区别_sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇

    Object中的wait.notify.notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑 通过这三个方法完成线程在指定锁(监视器)上的等待与唤醒,这三个方法是以锁( ...

  8. sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!

    点击上方蓝字关注小姐姐吧从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付.现在偶尔需要到后台的 SQL Server 里追查一些数 ...

  9. python join函数报错_python中join()函数的使用方法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分 ...

  10. 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法

    1.19.5.4.流上的Join 1.19.5.4.1.常规Join 1.19.5.4.2.时间区间Join 1.19.5.4.3.时态表Join 1.19.5.4.4.基于处理时间的时态Join 1 ...

最新文章

  1. java集合代码_Java-集合(示例代码)
  2. android 对比win10 耗电,win10系统下像何查看耗电的应用程序
  3. 【Java代码】Java版本的NGender根据中文姓名猜测其性别及男性化/女性化程度(Python版本地址+Java版本源码+基础数据)
  4. Vue+G2:Please specify the container for the chart! + Cannot read property ‘appendChild‘ of null
  5. python中的out of loop_TclError: out of stack space (infinite loop?)
  6. 已知序列求蝶形运算_(数字信号处理选择题.doc
  7. 关于nunit调试VS2010中的4.0程序集的问题
  8. 82c55单片机c语言,AT89S51单片机与82C55的接口设计编程
  9. Java实现微信H5支付
  10. python apply函数不打印_Python Pandas dataframe shift在apply函数中不起作用
  11. python代码图片头像_Python爬取堆糖网优美古风头像(附源码)
  12. 微信分享链接网页下载的无法打开解决方案,微信跳转外部浏览器
  13. java prase xml error
  14. 获取手机验证码按钮的效果实现
  15. 阿里企业邮箱smtp设置(实践)
  16. os.listdir()详解
  17. 政采法规 | 中小企业划型标准规定
  18. Qt学习之信号与槽函数断开:disconnect
  19. 使用Fiddler抓取微信小程序二维码请求地址
  20. 使用scrapy爬取qq音乐

热门文章

  1. 【第10篇】Python爬虫实战-手机归属地查询
  2. linux 终端分屏命令vsp
  3. Kali普通账户如何获取root管理员权限并切换中文?
  4. 数据质量管理平台 Qualitis 安装部署
  5. 个人博客地址,http://devopslinux.com/
  6. P2657 [SCOI2009] windy 数
  7. 计算机显示无法打开打印机,添加打印机时电脑弹出错误窗口“Windows无法打开添加打印机”(适用 Windows OS)...
  8. 【转载】2018传智播客黑马python人工智能15期视频教程
  9. [BZOJ1787][Ahoi2008]Meet 紧急集合[BZOJ1832][AHOI2008]聚会
  10. 浪潮云海OS C位出道 融合开放基础设施呼之欲出