mysql的列约束和数据查询

1.列约束

(1)主键约束 PRIMARY KEY

NULL,空,表示一个无法确定的值。例如暂时无法确定的商品价格,无法确定一个员工的电话。。。。

主键约束的列不允许为空,主键约束不能为NULL,NULL不能加引号,例如:编号不能为NULL

例如:

CREATE TABLE t3(
	id INT primary key
);

(2)非空约束 NOT NULL

声明了非空约束的列上禁止插入NULL

例如:

CREAT TABLE t3(
	age INT NOT NULL
);

(3)唯一约束 UNIQUE

声明了唯一约束的列不允许出现重复的值,允许插入NULL,甚至多个NULL。两个NULL之间不能划等号。

唯一约束可能会影响数据排序。

例如:

CREATE TABLE t3(
	user_name varchar(10) unique
);

(4)默认值约束 DEFAULT

例如:

CREATE TABLE t3(
	age INT DEFAULT 12,
	user_name varchar(10) DEFAULT '小明',
    phone_num int DEFAULT 110
);

插入数据的具体方式有两种:

INSERT INTO t3(age,user_name) VALUES(18,'小刚');      #phone_num未填写值,则直接为默认值 
INSERT INTO t3 VALUES(18,DEFAULT,138888888);

(5)检查约束 CHECK

也称为自定义约束,用户可以自己指定约束条件。mysql不支持检查约束,会影响数据插入速度,给服务器造成压力。

(6)外键约束

为了建立表之间的关联,外键约束列上的值,必须得再另一个表的主键列中出现过。

外键列和对应的主键列的列类型要保持一致

语法:FOREGIN KEY (外键列)Q AZ`1另一个表 (主键列)

CREATE TABLE t1(
	id int primary key
);
插入数据INSERT INTO........
CREATE TABLE t2(
	aid int primary key,
	foreign key (aid) references t1(id)
);
插入数据INSERT INTO........

(7)自增列 AUTO_INCREMENT

自动自增,插入数据的时候,不需要设置编号 只需要设置为NULL,就会获取当前的最大值,然后+1插入。

CREATE TABLE t1(
	id int AUTO_INCREMENT
);


2.简单查询数据

(1)查询整个数据表数据

SELECT*FROM t1;

(2)查询数据表中某列的数据

SELECT age,name,salary FROM t1;

(3)给列取别名再查询

SELECT age AS 年龄,name AS 姓名,salary AS 工资 FROM t1;    #AS可以用空格代替

(4)显示不同的记录

SELECT DISTINCT age FROM t1;     #显示表1中不同age的数据,相同的则不显示

(5)查询时计算

SELECT (salary+1000)*12+20000 年薪 FROM t1;     #计算t1表中年薪(月薪递增1000 年终奖为20000)

(6)查询结果集排序

SELECT*FROM t1 ORDER BY salary ASC(DESC);       #把表t1中的工资数据以升(降)序 排列     ASC=ascendant  DESC=descendant    #如果不加排序规则,默认是ASC升序.

(7)按指定条件查询

SELECT*FROM t1 WHERE age>25 AND salary>=10000;  #按年龄在25岁以上 工资大于等于10000来查询表t1的数据.
-----------------------------------------------------------------------------------------
SELECT*FROM t1 WHERE salary>=5000 AND salary<=10000 AND age=25;  #按年龄为25岁 工资5000-10000来查询表t1的数据.  
(工资5000-10000也可以用WHERE salary BETWEEN 5000 AND 10000 #来表示,不能用5000<=salary<=8000这种形式)
-----------------------------------------------------------------------------------------
SELECT*FROM t1 WHERE salary is null;  #查询没有明确工资的员工     
SELECT*FROM t1 WHERE salary is not null;   #查询有明确工资的员工  NULL 不可以=或者!来运算 只能用is或者is not 
-----------------------------------------------------------------------------------------
SELECT*FROM t1 WHERE salary=5000 OR salary=10000;
SELECT*FROM t1 WHERE salary in(5000,10000);    #以上两个代码都可以查询出t1表中工资为5000或者10000的员工。
SELECT*FROM t1 WHERE salary not in(5000,1000)   #此行代码为查询t1表中工资不是5000或者10000的员工。

(8)模糊条件查询

通常用与搜索

SELECT*FROM t1 WHERE name LIKE '%o%';                    #查询t1表中名字中间含有o的员工
SELECT*From t1 WHERE name LIKE '%o';                     #查询t1表中名字以o结尾的员工
SELECT*FROM t1 WHERE name LIKE '_o%';                    #查询t1表中名字中第二个字符为o的员工
SELECT*FROM t1 WHERE name LIKE '%o_';					 #查询t1表中名字中倒数第二个字符为o的员工

(9)分页查询

查询的结果集中有太多的数据,这些数据一次显示不完,可以做成分页显示。

需要有两个已知的条件:当前的页码,每页数据的数量。

#语法:SELECT * FROM t1 LIMIT 开始的值,每页数据的数量
练习:我想查第10页的数据,每页显示10条数据
SELECT*FROM t1  LIMIT 90,10;

*开始的值=(当前的页码-1)每页的数据量


3.复杂查询

(1)聚合查询/分组查询

示例:查询出所有员工数量

函数:是一个功能体,提供若干个数据,返回处理的结果

count()sum()max()min()avg()
数量总和最大最小平均
SELECT AVG(salay) FROM t1 WHERE sex=1;  #查询t1表中男员工的平均工资.
SELECT AVG(salary),MAX(salary),MIN(salary),sex FROM t1 GROUP BY sex; #查询t1表中平均工资,最高工资和最低工资,按照性别来分组。
SELECT name,YEAR(birthday) FROM t1 WHERE YEAR(birthday)=1993;  #查询t1表中1993年出生的人员

(2)子查询

查询市场部的员工有哪些?

步骤1:查询出市场部的部门编号

SELECT did FROM dept WHERE dname='市场部';            #查询出结果为市场部编号为20

步骤2SELECT*FROM emp WHERE deptId=20;               #查询出市场部员工的数据

一步到位: SELECT*FROM emp WHERE deptId=(SELECT did FROM dept WHERE dname='市场部')

(3)多表查询

查询出所有员工的姓名及其部门名称

SELECT emp.ename,dept.dname FROM dept,emp where emp.deptId=dept.did;         

#emp为员工表 dept为部门表 deptId为员工所在部门编号 did为部门编号。

新的多表查询法

  • 内连接-----------------和上面代码块的查询结果一致。

    SELECT ename,dname FROM emp INNE JOIN dept ON depId=did;
    
  • 左外连接

    SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON depId=did;
    #先写哪个表 哪个表就是左,左侧表所有记录都显示   outer关键字可以省略 
    
  • 右外连接

    SELECT ename,dname FROM emp RIGHT JOIN dept ON deptId=did;
    #后写哪个表 哪个表就是右,右侧表中所有记录都显示
    
  • 全连接
    FULL JOIN mysql 不支持~

    可以用 UNION或者UNION ALL 来查询

    SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON depId=did;
    UNION (ALL)
    SELECT ename,dname FROM emp RIGHT JOIN dept ON deptId=did;
    #UNION 合并相同数据   UNION ALL不合并相同数据
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值