zoukankan      html  css  js  c++  java
  • 数据库操作语句:

    数据库操作语句:

    常用数据类型:
    int:整型
    double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
    char:固定长度字符串类型; char(10) 'aaa ' 占10位
    varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
    text:字符串类型;
    blob:字节类型;
    date:日期类型,格式为:yyyy-MM-dd;
    time:时间类型,格式为:hh:mm:ss
    timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
    datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
    常用约束:
    主键约束:primary key
    唯一约束:unique [key]
    非空约束:not null
    默认约束:default
    外键约束:foreign key
    自动增长:auto_increment
    DROP TABLE语句用于删除现有表

    DDL使用:

    1.查看数据库的个数和某个数据库,以及查看当前使用的数据库
    show databases;
    show database dbname;
    select database;
    2.使用指定或者切换数据库
    use dbname;
    3.删除数据库
    drop database dbname;
    4.创建表和删除表
    create table employee
    (
    id int not null,
    age int not null,
    name String varchar(255),
    primary key(id)
    );

    drop table table_name;
    5.查看当前使用的数据库的所有表 和 查看表的字段内容
    show tables;
    decs table_name;
    数据库表操作:
    1.增加表列
    alter table employee add reward int(20);
    2.修改表
    alter table employee modify 列名 列属性;//修改表列的长度
    alter table employee drop reward;//删除表列
    alter table employee character set gbk;//修改表的字符集为gbk
    alter table employee change name username varchar(100);
    3.修改表名
    rename table employee to user;
    4.查看表格的创建细节
    show create table user;

    DML操作:

    DML是对表中的数据进行增,删,改,查的操作,不要与DDL混淆。
    主要包括:insert update delete

    小知识:
    在mysql中,字符串类型和日期类型都要用单引号括起来。
    空值:null
    增加操作 INSERT:
    1.根据表数据插入数据
    INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','goodgirl');

    小知识:

    查看数据库编码的具体信息
    Show variables like ‘character%’;
    临时更改客户端和服务器结果集的编码
    Set character_set_client=gbk;
    Set character_set_results=gbk;
    或者
    SET NAMES ‘gbk’;
    修改操作 UPDATE:
    1.修改所有员工的薪水
    update emp set salary = 5000 ;
    2.修改姓名为'xxx'的员工的 薪水为3000;
    update emp set salary = 3000 where name = 'xxx';
    3.修改姓名为'xxx' 的员工薪水为 4000,gender 改为 ‘ccc’
    updatte emp set salary = 4000,gender = 'ccc' where name = 'xxx';
    4.将wu的薪水在原有基础上增加10000元
    update emp set salary =salary+1000 where gender = 'male';
    删除操作 : DELETE :
    1.删除表中的名称为’zs‘ 的记录
    delete from emp where name='zs';
    2.删除表中所有的记录
    delete from emp;
    3.使用truncate删除表中的记录
    TRUNCATE TABLE emp;
    1.delete 删除表中的数据,表结构还在,删除后的数据还可以找回
    2.truncate删除是把表直接drop掉,然后再创建一个同样的新表
    3.删除的数据不能找回,执行速度比delete块

    DQL数据查询:

    数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
    查询返回的结果集是一张虚拟表

    SELECT:

    语法:SELECT 列名 FROM 表名 (where-->broup by -->having --> order by)
    SELECT selection_list 要查询的列名
    FROM   table_list     要查询的表名称
    WHERE condition       行条件
    GROUP By   grouping_columns 对结果分组
    HAVING condition       分组后的行条件
    ORDER BY   sorting_columns   对结果分组
    LIMIT offset_start,row_count 结果限定
    简单查询:
    1.查询所有列
    select * from stu;
    2.查询指定列
    select sid,sname,age from stu;
    条件查询:
    条件查询就是在 查询时给出where子句,在where子句中可以使用如下运损及关键字:
    =,!=<><<=>>=;
    BETWEEN...AND;
    IN(set);
    IS NULL;
    AND;
    OR;
    NOT;
    1.查询学号为S_1001,S_1002,S_1003的记录   或者不为  not in
    SELECT * FROM stu
    WHERE sid IN ('S_1001','S_1002','S_1003');
    2.查询年龄为null的记录
    select * from stu where age  is NULL;
    3.查询年龄在20到40的学生记录
    1.WHERE age>=20 AND age<=40;
    2.WHERE age BETWEEN 20 AND 40;
    4.查询性别非男的学生记录
    1.WHERE gender!='male';
    2.WHERE gender<>'male';
    3.WHERE NOT gender='male';
    5.查询姓名不为null的学生记录
    1.WHERE NOT sname IS NULL;
    2.WHERE sname IS NOT NULL;
    模糊查询:
    关键字:LIKE
    通配符:
    _任意一个字母
    %任意0-n个字母
    '张%'

    句式
    select * from stu where 姓名等 like '-';
    包含a '%a%'
    第二个字母为i '_i%'
    以z开头 'z%'

     

     

     

    字段控制查询:
    1.去重复:
    select distinct sal from emp;
    2.查看员工的月薪和佣金之和
    select *,sal+comm from emp;
    select *,sal+IFNULL(comm,0) from emp;//comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。使用了把NULL转换成数值0的函数IFNULL
    3.给查询的列名添加别名as 可以省略
    select *,sal+IFNULL(comm,0) as 'total' from emp;
    排序:
    1.所有学生的年龄升序
    select * from stu order by sage ASC;
    select * from stu order by sage;
    2.所有学生的年龄降序
    select * from stu order by sage DEsc;
    3.查询所有员工,按月薪降序,月薪相同,按编号升序
    select * from stu order by sal DESC,empno ASC;

    聚合

    聚合函数:
    聚合函数是用来做纵向运算的函数:
    l COUNT():统计指定列不为NULL的记录行数;
    2 MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    3 MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
    4 SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    5 AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
    l COUNT():统计指定列不为NULL的记录行数;

    统计月薪与佣金之和大于2500元的人数:
    select count(*) as cnt from stu where sal+IFNULL(comm,0) >2500;
    查询有佣金的人数,以及有领导的人数:
    select count(comm),count(mgr) from emp;
    2 MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    3 MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

    查询最高工资和最低工资
    select max(sal),min(sal) from emp;
    4 SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    5 AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

    查看所有员工月薪和,以及所有雇员佣金和
    select sum(sal),sum(comm) from emp;
    查询所有员工月薪加佣金和:
    select sum(sal+ifnull(comm,0)) from emp;
    统计所有员工平均工资:
    SELECT AVG(sal) FROM emp;
    分组查询:
    按部门查询工资和,按男女查询工资和

    注意:
    凡和聚合函数coun sum avg max min同时出现的列名,则一定要写在group by 之后
    查询每个部门编号和每个部门工资和
    select deptno,sum(sal)
    from emp
    group by deptno;
    查询每个部门的部门编号以及每个部门的人数
    select deptno,count(*)
    from emp
    group by deptno;
    查询每个部门的部门编号以及每个部门工资大于1500的人数
    select deptno,count(*)
    from emp
    where sal>1500
    group by deptno;

    HAVING子句

    查询工资总和大于9000的部门编号以及工资和:
    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal) > 9000;

    注:having与where的区别:
    1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
    2.having后面可以使用分组函数(统计函数)
    where后面不可以使用分组函数。
    WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而
    HAVING是对分组后数据的约束。
    LIMIT:
    查询5行记录,起始从0行开始
    select * from emp limit 0,5;
    查询10行记录,起始从3开始
    select * from emp limit 3,19;

    分页查询:
    如果一页记录为10条,希望查看第3页记录应该怎么查呢?
    l 第一页记录起始行为0,一共查询10行;
    2 第二页记录起始行为10,一共查询10行;
    3 第三页记录起始行为20,一共查询10行;
    查询语句书写顺序:select – from- where- groupby- having- order by-limit
    查询语句执行顺序:from - where -group by -having - select - order by-limit

    实体完整性:

    主键约束(primary key)
    唯一约束(unique)
    自动增长列(auto_increment)
    主键的添加方式:
    创建表时 id int primary key
    创建表时 primary key(id) 优势,创建联合主键(两个或两个以上同时进行约束)
    建表之后 ALTER TABLE student ADD PRIMARY KEY (id);
    唯一约束(unique)
    数据不能重复:CREATE TABLE student(
    Id int primary key,
    Name varchar(50) unique
    );
    自动增长列(auto_increment)
    给主键添加自动增长,列只能是整数类型
    CREATE TABLE student(
    Id int primary key auto_increment,
    Name varchar(50)
    );
    INSERT INTO student(name) values(‘tom’);

    域完整性:

    域完整性约束:数据类型 非空约束(not null) 默认值约束(default)

    Name varchar(50) not null,
    Sex varchar(10) default ‘男’

    引用完整性:

    外键约束:FORRIGN KEY

    添加方式一,建表时,一个表的主键是另一表的成员
    添加方式二,ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);

    多表查询:

    1、合并结果集 
    	union(去除重复)               union all 
    2、连接查询
    	内连接   inner join on
    	外连接   outer join on
    		左外连接 left  join  以左边的表为基准
    		左内连接 right join  以右边的表为基准
    		全外连接(mysql 不支持) full join
    	自然连接  natural join
    
    连接查询心得:
    连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔
    积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外
    键关系去除。
    两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连
    接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少
    有一个主外键条件,三张表连接至少有两个主外键条件。
    

    子查询:

    l 子查询出现的位置:
    a. where后,作为条为被查询的一条件的一部分;
    b. from后,作表;
    l 当子查询出现在where后作为条件时,还可以使用如下关键字:
    a. any
    b. all
    

    课堂笔记:

    1、mysql  int(10)
        int类型长度4个字节,大约表示2^32 数字,10代表的是显示长度,一般和FILLZERO 约束一起使用,如果没有达到该长度,填充0    2-->0000000002
       mysql  varchar  最大长度可以设置到65535,但是一般设置为255
       mysql  double,float      (5,2代表总长度是5,小数点是占两个长度
    2、数据导入导出
          sql格式,xls格式
       
        将查询出来的数据制作成表格:
        select name,salary from worker into outfile 'C:/abc.xls';  

    3、如何配置你的mysql 服务器允许远程连接。
        方法一:该表法
          找到MySQL数据库,找到user表,找到User=root,Host=localhsot的那条记录
        修改Host为%,重启MySQL服务
        方法二: 通过SQL语句
        grant all privileges  on *.* to root@'%' identified by "root"; // 赋权限
        flush privileges;  // 刷新权限

    4、临时表中间表dual
        select 7*8 ; == select 7*8 from dual;
        作用只是为了语法合理,Oracle中该表不能省略。

    5、数据库设计三大范式
        1)第一范式    表中的每个字段都是独立的,不可分割的单元
              user
                id             name    
                 1           贾明灿|贾宝
              修改为    id     name    ex_name【曾用名】
        2第二范式    在满足第一范式的前体现
                一张表只能表示一个意思,每一个字段都要和主键有依赖关系
                employee
                 id      name   age    sex   salary { deptName   deptNo }  违反了第二范式
                 id      name    age   sex   salary  
                 dept  部门表
                  id      deptNo    deptName
                 技术部  现在叫  研发部
        3)  第三范式   在满足第二范式的前体现
                一张表只能表示一个意思,除主键外每个字段都只能和主键有依赖关系
                employee
                 id      name   age    sex   salary { deptName   deptNo }  违反了第二范式
                 id      name    age   sex   salary   deptId   deptName    第三范式 设计和第二范式可以联合理解
                 dept  部门表
                  id      deptNo    deptName
                 技术部  现在叫  研发部
               
         数据库设计的三大范式: 只是设计的规范,参考

    6、联合查询

        UNION   : 合并结果集,去除重复的数据
        UNION  ALL :    不去重  
         前面查询出来的列数和后面的结果集查询出来的列数要相等,建议类型也相同

     

  • 相关阅读:
    主机与虚拟机之间的网络连接
    QT下过多点的曲线绘制
    C++返回对象和返回引用
    STS MVC与MyBatis的结合
    STS中依赖项的设置
    STS中MyBatis的基本实现
    STS中不同包但相同类名引起的问题:A component required a bean of type 'javax.activation.DataSource' that could not be found
    STS中AOP的实现
    STS如何将一个文件夹设置缺省的创建路径(build path)
    ARB扩展与标准OpenGL的关系
  • 原文地址:https://www.cnblogs.com/gentle-awen/p/9594639.html
Copyright © 2011-2022 走看看