MySQL数据库2

 DQL 数据库查询

   关键词 select

   注意:从数据库查询信息 不会改变数据库表中的数据

   查询会产生一张新的表 从原来那个表中查出来的

   1.关系运算符 = ! > < >= <>(不等于)

   between..and.. 在什么范围内(包括这个范围)

   3.is not null 判断不是空的

   is null  判断是空的

   4.逻辑运算符

   and 与

   or 或

   not 非

   5.in() 在什么范围中查询

   not in()

   字段控制语句
   去除重复数据
   SELECT DISTINCT sal FROM emp;
   查看每个人佣金和薪金的和
   相当于查询了一个新的字段
    注意:如果一个值和null相加name得到的值 一定null值
    SELECT empno,sal+comm FROM emp;
    可以在查询的时候 给空值 赋个值
    SELECT *,empno,sal+IFNULL(comm,0) From emp;
    查询时可以给字段起个别名
    SELECT *,empno,sal+IFNULL(comm,0) total From emp;
    empno job字段 起别名
    SELECT empno as n,job as j FROM emp;
     按学生年龄排序
     默认是升序(ASC)
     降序(DESC)
     注意:sql语句关键词 不要与表名重复
    SELECT * FROM stu ORDER BY age DESC;
     查询所有雇员,按月薪降序排序,如果月薪相同时,按编号降序排序
    SELECT * FROM emp ORDER BY sal DESC,empno DESC;
     模糊查询
     查询名字中带l的人的所有信息
     %l 表示以l结尾 反之 %表示很多字母
     _下划线 表示单个字母
    SELECT * FROM emp WHERE ename LIKE '%l';
     聚合函数 都可以自动过滤空值
     COUNT 查询的是 获取总记录数
    SELECT COUNT(*) FROM emp;
     查询公司sal的总和(查询时记录数要相同)
    SELECT COUNT(*),sum(sal) FROM emp;
     查询emp表中有佣金的人数
     自动过滤空值
    SELECT COUNT(comm) from emp;
     查询emp表中月薪大于2500的人数
    SELECT COUNT(sal) from emp WHERE sal>2500;
     统计月薪与佣金之和大于2500元的人数
    SELECT COUNT(*) From emp WHERE sal+IFNULL(comm,0) >2500;
     查询有佣金的人数,有领导的人数
     SELECT COUNT(comm) 佣金,COUNT(mgr) 领导 from emp;
     查询所有雇员月薪和,以及所有雇员佣金和
    SELECT sum(sal),sum(comm) from emp;
     查询所有雇员月薪+佣金和
    SELECT SUM(sal+IFNULL(comm,0)) from emp;
     统计所有员工平均工资
    SELECT AVG(sal+IFNULL(comm,0)) from emp;
     查询最高工资和最低工资
    SELECT MAX(sal),MIN(sal) from emp;
    分组查询 group by
     查询每个部门的部门编号和每个部门的工资和
     如果是分组查询 那么GROUP BY后面的字段
     才可以 查询字段的位置
    SELECT deptno,SUM(sal) from emp GROUP BY deptno;
     查询每个部门的部门编号以及每个部门的人数
    SELECT deptno,COUNT(*) from emp GROUP BY deptno;
     查询每个部门的部门编号以及每个部门工资大于1500的人数
     先用where筛选 然后在进行分组
    SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
     查询工资总和大于9000的部门编号以及工资和
     where后面不能跟聚合函数
     HAVING是分组以后使用的筛选关键词
     SELECT deptno,sum(sal) from emp GROUP BY deptno HAVING SUM(sal)>9000;
     分页查询 LIMIT 关键词
     查询前3条数据
     参数1 从哪条数据开始
     参数2 一共查询几条
    int 当前页 = 1;
    int 每页显示总数 = 5;
    SELECT * from emp LIMIT 3,3;

    (当前页-1)*每页显示总数,每页显示总数;

    数据的完整性
    实体完整性

    主键约束
    创建表stu1 sid sname 把id设置为主键
    主键特点:唯一且不能为null
    CREATE TABLE stu1(
    sid int PRIMARY KEY,
    sname varchar(20)
    );
    方式2
    CREATE TABLE stu2(
    sid int,
    sname varchar(20),
    PRIMARY KEY (sid)
    );

    用来创建联合主键
    当连个字段的值完全一样才算重复
    CREATE TABLE stu3(
    classid int,
    sid int,
    sname varchar(20),
    PRIMARY KEY (sid,classid)
    );

    创建方式3
    CREATE TABLE stu4(
    sid int,
    sname varchar(20)
    );
     添加主键约束
    ALTER TABLE stu4 ADD CONSTRAINT PRIMARY KEY(sid);
     删除主键约束
    ALTER TABLE stu4 DROP PRIMARY KEY;

     唯一约束 UNIQUE
     特点:值唯一(可以为空)
    CREATE TABLE stu5(
    sid int PRIMARY KEY,
    sname varchar(20) UNIQUE
    );
    自动增长列
    特点:自动加2 并且出现过的 就不会再出现了
    CREATE TABLE stu6(
    sid int PRIMARY KEY auto_increment,
    sname varchar(20) UNIQUE
    );
    INSERT INTO stu6 (sname)values('haha');
    INSERT INTO stu6 (sname,sid)values('haha1',NULL);
    域完整性
    限制单元格内的数据的完整性
    CREATE TABLE stu8(
    sid int PRIMARY KEY auto_increment,
    sname varchar(20) NOT NULL,
    sgender VARCHAR(20) DEFAULT '男'
    );

    引用约束(参照物约束)
    主表和从表有依赖关系 从表依赖主表
    这时可以给从表添加一个约束 外键约束
    CREATE TABLE student1(
    sid int PRIMARY KEY,
    sname varchar(20)
    );

    CREATE TABLE score1(

    sid int, 

    score int,

    CONSTRAINT fk_stu_score_sid 
    FOREIGN KEY (sid) REFERENCES student1(sid)

    );

    创建外键的第二种方式
    CREATE TABLE student(
    sid int PRIMARY key,
    sname varchar(20)
    );
    CREATE TABLE  score(
    sid int,
    score int
    );
    给sore添加外键
    ALTER TABLE score ADD CONSTRAINT fk_student_score_sid FOREIGN KEY(sid)
    REFERENCES student(sid);
    删除(要使用约束的别名来删除)
    一个表可以有多个外键 需要使用约束名字
    注意:约束名(外键名字)不能重复
    ALTER TABLE score DROP FOREIGN KEY fk_student_score_sid;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值