精华内容
下载资源
问答
  • 删除数据库sql语句

    2021-08-13 16:58:33
    drop database 数据库名 --删除数据库的 drop table 表名–删除表的 delete from 表名 where 条件 --删除数据的 truncate table 表名 也是删除数据库的.但是他可以裁断序列 重新开始(一般使用这个比较多)

    drop database 数据库名 --删除数据库的
    drop table 表名–删除表的
    delete from 表名 where 条件 --删除数据的
    truncate table 表名 也是删除数据库的.但是他可以裁断序列 重新开始(一般使用这个比较多)

    展开全文
  • OC_数据库常见SQL语句

    2016-07-21 09:26:38
    OC_数据库常见SQL语句

    OC_数据库常见SQL语句

    我们在iOS应用程序中无法使用图形化界面操作数据库,在程序运行过程中操作数据库中的数据需要通过SQL语句。(特别是喜欢使用FMDB框架的同志必须要掌握)

    什么是SQL?

    • SQL(structured query language):结构化查询语言。
    • SQL是对数据库中的数据进行定义和操作的语言。
    • SQL语言简洁,语法简单,好学好用。

    什么是SQL语句?

    • 使用SQL语言编写出来的句子\代码,就是SQL语句。
    • 在程序运行过程中,要想操作(增删改查)数据库中的数据,必须使用SQL语句。

    一、创建表


    创建表.png

    二、删除表


    删除表.png

    三、增


    增.png

    四、删


    删.png

    五、改


    改.png

    六、查

    /*
        DQL查询数据
        SELECT        -- 查询
        name, age    -- 查询的字段
        FROM        -- 从哪张表中查询
            JF_Person       -- 查询的表名
     */
    
    -- 查询指定字段
    SELECT name, age FROM JF_Person;
    
    -- 查询所有字段
    SELECT * FROM JF_Person;
    
    -- 查询 age < 22 的记录的name, age字段
    SELECT name, age FROM JF_Person WHERE age < 22;
    
    -- 查询 age < 22 的所有字段
    SELECT * FROM JF_Person WHERE age < 22;
    
    -- 查询记录总数
    SELECT COUNT(*) FROM JF_Person;
    
    -- 查询 age < 22 的记录总数
    SELECT COUNT(*) FROM JF_Person WHERE age < 22;
    
    -- 查询最大的 age
    SELECT MAX(age) FROM JF_Person;
    
    -- 查询最小的 age
    SELECT MIN(age) FROM JF_Person;
    
    -- 查询所有记录的所有字段,根据 age 升序排序
    SELECT * FROM JF_Person ORDER BY age;
    
    -- 查询所有记录的所有字段, 根据 age 降序排序
    SELECT * FROM JF_Person ORDER BY age DESC;
    
    -- 使用多个字段排序,先按age降序排序,当age相同再根据height降序排序
    SELECT * FROM JF_Person ORDER BY age DESC,height DESC;
    
    -- 返回指定的记录
    -- LIMIT常用于分页
    -- 0 表示跳过的3条
    -- 2 表示获取2条
    SELECT * FROM JF_Person LIMIT 3, 2;
    
    -- 取出年龄最大的3条记录
    SELECT * FROM JF_Person ORDER BY age DESC LIMIT 3;
    
    -- 查询是给字段取别名
    SELECT name AS JP_name, age AS JF_age, height AS JF_height FROM JF_Person;

    PS:添加、更新有有时候也会使用REPLACE,SQL语句的属性赋值
    (可以参考:学习Trip(封装FMDB)+融云(执行SQL代码部分))

    展开全文
  • MySQL数据库SQL语句

    千次阅读 2016-10-27 15:01:47
    MySQL数据库SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1、SQL概述1.1 什么是SQLSQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以...

    MySql数据库系列阅读

    1. MySQL数据库
    2. MySQL数据库:SQL语句
    3. MySQL数据库:完整性约束
    4. MySQL数据库备份与还原
    5. MySQL数据库:编码

    1. SQL概述

    1.1 什么是SQL

    SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQ标准(ANSI/ISO)有:

    • SQL-92:1992年发布的SQL语言标准
    • SQL:1999:1999年发布的SQL语言标签
    • SQL:2003:2003年发布的SQL语言标签

    这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。

    虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。

    SQL的作用:客户端使用SQL来操作服务器

    1.2 语法要求

    SQL标准(例如SQL99,即1999年制定的标准):由国际标准化组织(ISO)制定的,对DBMS的统一操作方式(例如相同的语句可以操作:mysql、oracle等)。

    SQL方言:某种DBMS不只会支持SQL标准,而且还会有一些自己独有的语法,这就称之为方言!例如limit语句只在MySQL中可以使用

    SQL语法

    • SQL语句可以单行或多行书写,以分号结尾
    • 可以用空格和缩进来来增强语句的可读性
    • 关键字不区别大小写,建议使用大写

    2. 分类

    • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等
    • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)
    • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别
    • DQL(Data Query Language):数据查询语言,用来查询记录(数据)

    3. DDL:数据定义语言

    3.1 基本操作

    • 查看所有数据库名称:SHOW DATABASES; 
    • 切换数据库:USE mydb1,切换到mydb1数据库;

    3.2 操作数据库

    • 创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;

    例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错

    • 删除数据库:DROP DATABASE [IF EXISTS] mydb1;

    例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错

    • 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8;

    修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8

    3.3 数据类型

    MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。常用类型如下:

    类型说明
    int整型
    double浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99
    decimal浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题
    char固定长度字符串类型
    varchar可变长度字符串类型
    text字符串类型
    blob字节类型
    date日期类型,格式为:yyyy-MM-dd
    time时间类型,格式为:hh:mm:ss
    timestamp时间戳类型

    3.4 操作表

    创建表:

    CREATE TABLE 表名(
      列名 列类型,
      列名 列类型,
      ......
    );

    例如:

    CREATE TABLE stu(
        sid     CHAR(6),
        sname   VARCHAR(20),
        age     INT,
        gender  VARCHAR(10)
    );

    再例如:

    CREATE TABLE emp(
        eid     CHAR(6),
        ename   VARCHAR(50),
        age     INT,
        gender  VARCHAR(6),
        birthday    DATE,
        hiredate    DATE,
        salary  DECIMAL(7,2),
        resume  VARCHAR(1000)
    );
    SHOW TABLES; /*查看当前数据库中所有表名称*/
    
    SHOW CREATE TABLE emp;/*查看emp表的创建语句*/
    
    DESC emp; /*查看emp表结构*/
    
    DROP TABLE emp; /*删除emp表*/

    修改表:add,modify,change,drop

    /*修改之添加列:给stu表添加classname列*/
    ALTER TABLE stu ADD (classname varchar(100));
    
    /*修改之修改列类型:修改stu表的gender列类型为CHAR(2)*/
    ALTER TABLE stu MODIFY gender CHAR(2);
    
    /*修改之修改列名:修改stu表的gender列名为sex*/
    ALTER TABLE stu change gender sex CHAR(2);
    
    /*修改之删除列:删除stu表的classname列*/
    ALTER TABLE stu DROP classname;
    
    /*修改之修改表名称:修改stu表名称为student*/
    ALTER TABLE stu RENAME TO student;

    4. DML:数据操作语言

    4.1 插入数据

    语法:INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)

    INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');
    INSERT INTO stu(sid, sname) VALUES('s_1001', 'zhangSan');

    因为没有插入age和gender列的数据,所以该条记录的age和gender值上为NULL

    语法:INSERT INTO 表名 VALUES(值1,值2,…)

    因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:

    INSERT INTO stu VALUES('s_1002', 'liSi', 32, 'female');

    注意:所有字符串数据必须使用单引用!

    4.2 修改数据

    语法:UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]

    UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;
    UPDATE stu SET sname=’liSi’, age=’20WHERE age>50 AND gender=’male’;
    UPDATE stu SET sname=’wangWu’, age=’30WHERE age>60 OR gender=’female’;
    UPDATE stu SET gender=’female’ WHERE gender IS NULL
    UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;

    4.3 删除数据

    语法:DELETE FROM 表名 [WHERE 条件]

    DELETE FROM stu WHERE sid=’s_1001’003B
    DELETE FROM stu WHERE sname=’chenQi’ OR age > 30;
    DELETE FROM stu;

    语法:TRUNCATE TABLE 表名

    TRUNCATE TABLE stu;

    虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE高!

    TRUNCATE其实属性DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。

    5. DCL:数据控制语言

    5.1 创建用户

    语法:CREATE USER 用户名@地址 IDENTIFIED BY ‘密码’;

    CREATE USER user1@localhost IDENTIFIED BY123’;
    
    CREATE USER user2@’%’ IDENTIFIED BY123’;

    5.2 给用户授权

    语法:GRANT 权限1, … , 权限n ON 数据库.* TO 用户名

    GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
    GRANT ALL ON mydb1.* TO user2@localhost;

    5.3 撤销授权

    语法:REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名

    REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;

    5.4 查看用户权限

    语法:SHOW GRANTS FOR 用户名

    SHOW GRANTS FOR user1@localhost;

    5.5 删除用户

    语法:DROP USER 用户名

    DROP USER user1@localhost;

    5.6 修改用户密码

    语法:

    USE mysql;
    UPDATE USER SET PASSWORD=PASSWORD(‘密码’) WHERE User=’用户名’ and Host=’IP’;
    FLUSH PRIVILEGES;
    UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='user2' and Host=’localhost’;
    FLUSH PRIVILEGES;

    6. 数据查询语法(DQL)

    DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。语法:

    SELECT selection_list   /*要查询的列名称*/
    FROM table_list         /*要查询的表名称*/
    WHERE condition         /*行条件*/
    GROUP BY grouping_columns   /*对结果分组*/
    HAVING condition            /*分组后的行条件*/
    ORDER BY sorting_columns    /*对结果分组*/
    LIMIT offset_start, row_count;  /*结果限定*/

    创建学生表:stu

    字段名称字段类型说明
    sidchar(6)学生学号
    snamevarchar(50)学生姓名
    ageint学生年龄
    gendervarchar(50)学生性别
    CREATE TABLE stu (
        sid CHAR(6),
        sname       VARCHAR(50),
        age     INT,
        gender  VARCHAR(50)
    );
    
    INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
    INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
    INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
    INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
    INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
    INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
    INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
    INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
    INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
    INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
    INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);

    雇员表:emp

    字段名称字段类型说明
    empnoint员工编号
    enamevarchar(50)员工姓
    jobvarchar(50)员工工
    mgrint领导编号
    hiredatedate入职日
    saldecimal(7,2)月薪
    commdecimal(7,2)奖金
    deptnoint部分编号
    CREATE TABLE emp(
        empno       INT,
        ename       VARCHAR(50),
        job         VARCHAR(50),
        mgr         INT,
        hiredate    DATE,
        sal         DECIMAL(7,2),
        comm        decimal(7,2),
        deptno      INT
    ) ;
    
    INSERT INTO emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
    INSERT INTO emp values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
    INSERT INTO emp values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
    INSERT INTO emp values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
    INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
    INSERT INTO emp values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
    INSERT INTO emp values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
    INSERT INTO emp values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
    INSERT INTO emp values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
    INSERT INTO emp values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
    INSERT INTO emp values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
    INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
    INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
    INSERT INTO emp values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

    部门表:dept

    字段名称字段类型说明
    deptnoint部分编码
    dnamevarchar(50)部分名称
    locvarchar(50)部分所在地点
    CREATE TABLE dept(
        deptno      INT,
        dname       varchar(14),
        loc     varchar(13)
    );
    
    INSERT INTO dept values(10, 'ACCOUNTING', 'NEW YORK');
    INSERT INTO dept values(20, 'RESEARCH', 'DALLAS');
    INSERT INTO dept values(30, 'SALES', 'CHICAGO');
    INSERT INTO dept values(40, 'OPERATIONS', 'BOSTON');

    6.1 基础查询

    6.1.1 查询所有列

    SELECT * FROM stu;

    6.1.2 查询指定列

    SELECT sid, sname, age FROM stu;

    6.2 条件查询

    6.2.1 条件查询介绍

    条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

    • =、!=、<>、<、<=、>、>=
    • BETWEEN…AND
    • IN(set)
    • IS NULL
    • AND
    • OR
    • NOT

    6.2.2 查询性别为女,并且年龄50的记录

    SELECT * FROM stu
    WHERE gender='female' AND ge<50;

    6.2.3 查询学号为S_1001,或者姓名为liSi的记录

    SELECT * FROM stu
    WHERE sid ='S_1001' OR sname='liSi';

    6.2.4 查询学号为S_1001,S_1002,S_1003的记录

    SELECT * FROM stu
    WHERE sid IN ('S_1001','S_1002','S_1003');

    6.2.5 查询学号不是S_1001,S_1002,S_1003的记录

    SELECT * FROM tab_student
    WHERE s_number NOT IN ('S_1001','S_1002','S_1003');

    6.2.6 查询年龄为null的记录

    SELECT * FROM stu
    WHERE age IS NULL;

    6.2.7 查询年龄在20到40之间的学生记录

    SELECT *
    FROM stu
    WHERE age>=20 AND age<=40;

    或者

    SELECT *
    FROM stu
    WHERE age BETWEEN 20 AND 40;

    6.2.8 查询性别非男的学生记录

    SELECT *
    FROM stu
    WHERE gender!='male';

    或者

    SELECT *
    FROM stu
    WHERE gender<>'male';

    或者

    SELECT *
    FROM stu
    WHERE NOT gender='male';

    6.2.9 查询姓名不为null的学生记录

    SELECT *
    FROM stu
    WHERE NOT sname IS NULL;

    或者

    SELECT *
    FROM stu
    WHERE sname IS NOT NULL;

    6.3模糊查询

    当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE

    6.3.1 查询姓名由5个字母构成的学生记录

    SELECT *
    FROM stu
    WHERE sname LIKE '_____';

    模糊查询必须使用LIKE关键字。其中 “_”匹配任意一个字母,5个“_”表示5个任意字母。

    6.3.2 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

    SELECT *
    FROM stu
    WHERE sname LIKE '____i';

    6.3.3 查询姓名以“z”开头的学生记录

    SELECT *
    FROM stu
    WHERE sname LIKE 'z%';

    其中“%”匹配0~n个任何字母。

    6.3.4 查询姓名中第2个字母为“i”的学生记录

    SELECT *
    FROM stu
    WHERE sname LIKE '_i%';

    6.3.5 查询姓名中包含“a”字母的学生记录

    SELECT *
    FROM stu
    WHERE sname LIKE '%a%';

    6.4 字段控制查询

    6.4.1 去除重复记录

    去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:

    SELECT DISTINCT sal FROM emp;

    6.4.2 查看雇员的月薪与佣金之和

    因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型,那么会出错。

    SELECT *,sal+comm FROM emp;

    comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:

    SELECT *,sal+IFNULL(comm,0) FROM emp;

    6.4.3 给列名添加别名

    在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:

    SELECT *, sal+IFNULL(comm,0) AS total FROM emp;

    给列起别名时,是可以省略AS关键字的:

    SELECT *,sal+IFNULL(comm,0) total FROM emp;

    6.5 排序

    6.5.1 查询所有学生记录,按年龄升序排序

    SELECT *
    FROM stu
    ORDER BY sage ASC;

    或者

    SELECT *
    FROM stu
    ORDER BY sage;

    6.5.2 查询所有学生记录,按年龄降序排序

    SELECT *
    FROM stu
    ORDER BY age DESC;

    6.5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序

    SELECT * FROM emp
    ORDER BY sal DESC,empno ASC;

    7. 聚合函数

    聚合函数是用来做纵向运算的函数:

    聚合函数功能描述
    COUNT()统计指定列不为NULL的记录行数
    MAX()计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
    MIN()计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
    SUM()计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
    AVG()计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0

    7.1 COUNT

    当需要纵向统计时可以使用COUNT()。

    查询emp表中记录数:

    SELECT COUNT(*) AS cnt FROM emp;

    查询emp表中有佣金的人数:

    SELECT COUNT(comm) cnt FROM emp;

    注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。

    查询emp表中月薪大于2500的人数:

    SELECT COUNT(*) FROM emp
    WHERE sal > 2500;

    统计月薪与佣金之和大于2500元的人数:

    SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;

    查询有佣金的人数,以及有领导的人数:

    SELECT COUNT(comm), COUNT(mgr) FROM emp;

    7.2 SUM和AVG

    当需要纵向求和时使用sum()函数。

    查询所有雇员月薪和:

    SELECT SUM(sal) FROM emp;

    查询所有雇员月薪和,以及所有雇员佣金和:

    SELECT SUM(sal), SUM(comm) FROM emp;

    查询所有雇员月薪+佣金和:

    SELECT SUM(sal+IFNULL(comm,0)) FROM emp;

    统计所有员工平均工资:

    SELECT SUM(sal), COUNT(sal) FROM emp;

    或者

    SELECT AVG(sal) FROM emp;

    7.3 MAX和MIN

    查询最高工资和最低工资:

    SELECT MAX(sal), MIN(sal) FROM emp;

    8. 分组查询

    当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。

    8.1 分组查询

    查询每个部门的部门编号和每个部门的工资和:

    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;

    8.2 HAVING子句

    查询工资总和大于9000的部门编号以及工资和:

    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal) > 9000;

    注意,WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

    9. LIMIT

    LIMIT用来限定查询结果的起始行,以及总行数。

    9.1 查询5行记录,起始行从0开始

    SELECT * FROM emp LIMIT 0, 5;

    注意,起始行从0开始,即第一行开始!

    9.2 查询10行记录,起始行从3开始

    SELECT * FROM emp LIMIT 3, 10;

    9.3 分页查询

    如果一页记录为10条,希望查看第3页记录应该怎么查呢?

    • 第一页记录起始行为0,一共查询10行;
    • 第二页记录起始行为10,一共查询10行;
    • 第三页记录起始行为20,一共查询10行;

    10. 多表查询

    多表查询有如下几种:

    • 合并结果集;
    • 连接查询
    • 内连接,或等值连接:获取两个表中字段匹配关系的记录
    • 外连接
      • 左外连接:获取左表所有记录,即使右表没有对应匹配的记录
      • 右外连接:用于获取右表所有记录,即使左表没有对应匹配的记录
      • 全外连接(MySQL不支持):只要某一个表存在匹配,就返回行
    • 自然连接
    • 子查询

    10.1 合并结果集

    作用:合并结果集就是把两个select语句的查询结果合并到一起!
    要求:被合并的两个结果:列数、列类型必须相同

    合并结果集有两种方式:

    • UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
    • UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。

      mysql

    mysql

    10.2 连接查询

    连接查询就是求出多个表的乘积,例如t1连接t2,那么查询出的结果就是t1*t2。

    mysql

    连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。

    那么多表查询产生这样的结果并不是我们想要的,那么怎么去除重复的,不想要的记录呢,当然是通过条件过滤。通常要查询的多个表之间都存在关联关系,那么就通过关联关系去除笛卡尔积。

    你能想像到emp和dept表连接查询的结果么?emp一共14行记录,dept表一共4行记录,那么连接后查询出的结果是56行记录。

    也就你只是想在查询emp表的同时,把每个员工的所在部门信息显示出来,那么就需要使用主外键来去除无用信息了。

    mysql

    使用主外键关系做为条件来去除无用信息

    SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;

    mysql

    上面查询结果会把两张表的所有列都查询出来,也许你不需要那么多列,这时就可以指定要查询的列了。

    SELECT emp.ename,emp.sal,emp.comm,dept.dname
    FROM emp,dept
    WHERE emp.deptno=dept.deptno;

    mysql

    还可以为表指定别名,然后在引用列时使用别名即可。

    SELECT e.ename,e.sal,e.comm,d.dname
    FROM emp AS e,dept AS d
    WHERE e.deptno=d.deptno;

    10.2.1 内连接

    上面的连接语句就是内连接,但它不是SQL标准中的查询方式,可以理解为方言!SQL标准的内连接为:

    SELECT *
    FROM emp e
    INNER JOIN dept d
    ON e.deptno=d.deptno;

    内连接的特点:查询结果必须满足条件。例如我们向emp表中插入一条记录:

    其中deptno为50,而在dept表中只有10、20、30、40部门,那么上面的查询结果中就不会出现“张三”这条记录,因为它不能满足e.deptno=d.deptno这个条件。

    mysql

    10.2.2 外连接(左连接、右连接)

    外连接的特点:查询出的结果存在不满足条件的可能。
    左连接:读取左边数据表的全部数据,即便右边表无对应数据

    SELECT * FROM emp e
    LEFT OUTER JOIN dept d
    ON e.deptno=d.deptno;

    左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。

    这么说你可能不太明白,我们还是用上面的例子来说明。其中emp表中“张三”这条记录中,部门编号为50,而dept表中不存在部门编号为50的记录,所以“张三”这条记录,不能满足e.deptno=d.deptno这条件。但在左连接中,因为emp表是左表,所以左表中的记录都会查询出来,即“张三”这条记录也会查出,但相应的右表部分显示NULL。

    mysql

    mysql

    10.2.3 右连接

    右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。例如在dept表中的40部门并不存在员工,但在右连接中,如果dept表为右表,那么还是会查出40部门,但相应的员工信息为NULL。

    SELECT * FROM emp e
    RIGHT OUTER JOIN dept d
    ON e.deptno=d.deptno;

    mysql

    连接查询心得:

    连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外键关系去除。

    两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少有一个主外键条件,三张表连接至少有两个主外键条件。

    读取右边数据表的全部数据,即便左边边表无对应数据

    mysql

    10.3 全外连接

    mysql

    全外连接(MySQL不支持):只要某一个表存在匹配,就返回行;可以使用UNION来完成全链接

    10.4 自然连接

    大家也都知道,连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式:

    两张连接的表中名称和类型完全一致的列作为条件,例如emp和dept表都存在deptno列,并且类型一致,所以会被自然连接找到!

    当然自然连接还有其他的查找条件的方式,但其他方式都可能存在问题!

    SELECT * FROM emp NATURAL JOIN dept;
    SELECT * FROM emp NATURAL LEFT JOIN dept;
    SELECT * FROM emp NATURAL RIGHT JOIN dept;

    10.5 子查询

    子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。

    • 子查询出现的位置:
      • where后,作为条件的一部分;
    • from后,作为被查询的一条表;
    • 当子查询出现在where后作为条件时,还可以使用如下关键字:
      • any
    • all
    • 子查询结果集的形式:
    • 单行单列(用于条件)
    • 单行多列(用于条件)
    • 多行单列(用于条件)
    • 多行多列(用于表)

    10.5.1 工资高于甘宁的员工。

    分析:
    查询条件:工资>甘宁工资,其中甘宁工资需要一条子查询。

    第一步:查询甘宁的工资

    SELECT sal FROM emp WHERE ename='甘宁'

    第二步:查询高于甘宁工资的员工

    SELECT * FROM emp WHERE sal > (${第一步})

    结果:

    SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='甘宁')

    子查询作为条件
    子查询形式为单行单列

    10.5.2 工资高于30部门所有人的员工信息

    分析:
    查询条件:工资高于30部门所有人工资,其中30部门所有人工资是子查询。高于所有需要使用all关键字。

    第一步:查询30部门所有人工资

    SELECT sal FROM emp WHERE deptno=30;

    第二步:查询高于30部门所有人工资的员工信息

    SELECT * FROM emp WHERE sal > ALL (${第一步})

    结果:

    SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)
    • 子查询作为条件
    • 子查询形式为多行单列(当子查询结果集形式为多行单列时可以使用ALL或ANY关键字)

    10.5.3 查询工作和工资与殷天正完全相同的员工信息

    分析:
    查询条件:工作和工资与殷天正完全相同,这是子查询

    第一步:查询出殷天正的工作和工资

    SELECT job,sal FROM emp WHERE ename='殷天正'

    第二步:查询出与殷天正工作和工资相同的人

    SELECT * FROM emp WHERE (job,sal) IN (${第一步})

    结果:

    SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='殷天正')
    • 子查询作为条件
    • 子查询形式为单行多列

    10.5.4 查询员工编号为1006的员工名称、员工工资、部门名称、部门地址

    分析:
    查询列:员工名称、员工工资、部门名称、部门地址
    查询表:emp和dept,分析得出,不需要外连接(外连接的特性:某一行(或某些行)记录上会出现一半有值,一半为NULL值)
    条件:员工编号为1006

    第一步:去除多表,只查一张表,这里去除部门表,只查员工表

    SELECT ename, sal FROM emp e WHERE empno=1006

    第二步:让第一步与dept做内连接查询,添加主外键条件去除无用笛卡尔积

    SELECT e.ename, e.sal, d.dname, d.loc
    FROM emp e, dept d
    WHERE e.deptno=d.deptno AND empno=1006

    第二步中的dept表表示所有行所有列的一张完整的表,这里可以把dept替换成所有行,但只有dname和loc列的表,这需要子查询。

    第三步:查询dept表中dname和loc两列,因为deptno会被作为条件,用来去除无用笛卡尔积,所以需要查询它。

    SELECT dname,loc,deptno FROM dept;

    第四步:替换第二步中的dept

    SELECT e.ename, e.sal, d.dname, d.loc
    FROM emp e, (SELECT dname,loc,deptno FROM dept) d
    WHERE e.deptno=d.deptno AND e.empno=1006
    • 子查询作为表
    • 子查询形式为多行多列

    11. MySQL 索引

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

    索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

    创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

    实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

    上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

    建立索引会占用磁盘空间的索引文件。

    11.1 普通索引

    CREATE INDEX indexName ON mytable(username(length)); //创建索引
    ALTER mytable ADD INDEX [indexName] ON (username(length)) ;//修改表结构
    DROP INDEX [indexName] ON mytable; //删除索引

    11.2 唯一索引

    CREATE UNIQUE INDEX indexName ON mytable(username(length)) ;//创建索引
    ALTER mytable ADD UNIQUE [indexName] ON (username(length)) ;修改表结构

    11.3 使用ALTER 命令添加和删除索引

    //该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
    ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);
    
    //这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)
    ALTER TABLE tbl_name ADD UNIQUE index_name (column_list);
    
    // 添加普通索引,索引值可出现多次
    ALTER TABLE tbl_name ADD INDEX index_name (column_list);
    
    //该语句指定了索引为 FULLTEXT ,用于全文索引
    ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list);

    mysql

    展开全文
  • 数据库常用sql语句总结

    万次阅读 多人点赞 2018-12-14 16:16:32
    查看时右侧可以打开CSDN自带的目录,方便查看 目录 一、基础 1.SELECT 语句 2.SELECT DISTINCT 语句 3.WHERE 子句 ...5.ORDER BY 语句 ...6.INSERT INTO 语句 ...7.Update 语句 ...3.SQL 通配符 4.IN...

    查看时右侧可以打开CSDN自带的目录,方便查看

    目录

    一、基础

    1.SELECT 语句

    2.SELECT DISTINCT 语句

    3.WHERE 子句

    4.AND 和 OR 运算符

    5.ORDER BY 语句

    6.INSERT INTO 语句

    7.Update 语句

    8.DELETE 语句

    二、高级

    1.TOP 子句

    2.LIKE 操作符

    3.SQL 通配符

    4.IN 操作符

    5.BETWEEN 操作符

    6.AS

    7.join 

    8.SQL UNION 操作符

    9.SELECT INTO 语句

    10.CREATE DATABASE 语句

    11.CREATE TABLE 语句

    12.SQL 约束

    SQL NOT NULL 约束

    SQL UNIQUE 约束

    SQL PRIMARY KEY 约束

    SQL FOREIGN KEY 约束

    SQL CHECK 约束

    SQL DEFAULT 约束

    13.CREATE INDEX 语句(索引)

    14.DROP 语句

    15.ALTER TABLE 语句

    16.AUTO INCREMENT 字段(自增)

    17.SQL CREATE VIEW 语句(视图)

    18.SQL 日期

    19.SQL NULL 值

    三、SQL 函数

    1.SQL AVG 函数

    2.SQL COUNT() 函数

    3.FIRST() 函数

    4.LAST() 函数

    5.MAX() 函数

    6.MIN() 函数

    7.SUM() 函数

    8.GROUP BY 语句

    9.HAVING 子句

    10.UCASE() 函数

    11.LCASE() 函数

    12.MID() 函数

    13.LEN() 函数

    14.ROUND() 函数

    15.NOW() 函数

    16.FORMAT() 函数


    一、基础

    1.SELECT 语句

    SELECT 语句用于从表中选取数据。

    结果被存储在一个结果表中(称为结果集)。

    SELECT 列名称 FROM 表名称
    SELECT * FROM 表名称

    在结果集(result-set)中导航:

    由 SQL 查询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。

    2.SELECT DISTINCT 语句

    在表中,可能会包含重复值。关键词 DISTINCT 用于返回唯一不同的值。

    SELECT DISTINCT 列名称 FROM 表名称

    3.WHERE 子句

    如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。

    SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

    运算符:大于等于小于,between,like

    SQL 使用单引号来环绕文本值。如果是数值,请不要使用引号。

    4.AND 和 OR 运算符

    AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

    5.ORDER BY 语句

    ORDER BY 语句用于根据指定的列对结果集进行排序。

    ORDER BY 语句默认按照升序(ASC)对记录进行排序。

    如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

    6.INSERT INTO 语句

    INSERT INTO 语句用于向表格中插入新的行。

    INSERT INTO 表名称 VALUES (值1, 值2,....)

    我们也可以指定所要插入数据的列:

    INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

    7.Update 语句

    Update 语句用于修改表中的数据。

    UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

    8.DELETE 语句

    DELETE 语句用于删除表中的行。

    DELETE FROM 表名称 WHERE 列名称 = 值

    可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:

    DELETE FROM table_name

    或者:

    DELETE * FROM table_name

    二、高级

    1.TOP 子句

    TOP 子句用于规定要返回的记录的数目。

    对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

    SELECT TOP number|percent column_name(s)
    FROM table_name

    例子:选择前两个记录

    SELECT TOP 2 * FROM Persons

    选择前50%的记录:

    SELECT TOP 50 PERCENT * FROM Persons

    2.LIKE 操作符

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

    SELECT column_name(s)
    FROM table_name
    WHERE column_name LIKE pattern

    例子:从 "Persons" 表中选取居住在以 "N" 开始的城市里的人:

    SELECT * FROM Persons
    WHERE City LIKE 'N%'

    "%" 可用于定义通配符(模式中缺少的字母)。可为空。

    '%g'、'%lon%'均可

    通过使用 NOT 关键字,可以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:

    SELECT * FROM Persons
    WHERE City NOT LIKE '%lon%'

    3.SQL 通配符

    直接上例子:

    使用 % 通配符

    从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:

    SELECT * FROM Persons
    WHERE City LIKE '%lond%'

    使用 _ 通配符

    从 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

    SELECT * FROM Persons
    WHERE FirstName LIKE '_eorge'

    从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":

    SELECT * FROM Persons
    WHERE LastName LIKE 'C_r_er'

    使用 [charlist] 通配符

    从"Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

    SELECT * FROM Persons
    WHERE City LIKE '[ALN]%'

    从 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

    SELECT * FROM Persons
    WHERE City LIKE '[!ALN]%'

    4.IN 操作符

    IN 操作符允许我们在 WHERE 子句中规定多个值。

    SELECT column_name(s)
    FROM table_name
    WHERE column_name IN (value1,value2,...)

    例子:

    SELECT * FROM Persons
    WHERE LastName IN ('Adams','Carter')

    5.BETWEEN 操作符

    操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

    SELECT column_name(s)
    FROM table_name
    WHERE column_name
    BETWEEN value1 AND value2

    如需选择范围之外的,请使用 NOT 操作符,加在between前面:

    6.AS

    为列名称和表名称指定别名(Alias)

    SELECT column_name(s)
    FROM table_name
    AS alias_name

    SELECT column_name AS alias_name
    FROM table_name

    7.join 

    有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

    例子:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons INNER JOIN Orders
    ON Persons.Id_P = Orders.Id_P
    ORDER BY Persons.LastName

    下面列出了几种 JOIN 类型,以及它们之间的差异。

    • JOIN(即INNER JOIN): 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行

    区别详解:

     

     

     

    8.SQL UNION 操作符

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

    SELECT column_name(s) FROM table_name1
    UNION (ALL)
    SELECT column_name(s) FROM table_name2

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

    另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

    例子:

    列出所有在中国和美国的不同的雇员名:

    SELECT E_Name FROM Employees_China
    UNIONSELECT E_Name FROM Employees_USA

    9.SELECT INTO 语句

    SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。

    SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

    您可以把所有的列插入新表:

    SELECT *
    INTO new_table_name [IN externaldatabase] 
    FROM old_tablename
    

    或者只把希望的列插入新表:

    SELECT column_name(s)
    INTO new_table_name [IN externaldatabase] 
    FROM old_tablename

    下面的例子会制作 "Persons" 表的备份复件:

    SELECT *
    INTO Persons_backup
    FROM Persons

    IN 子句可用于向另一个数据库中拷贝表:

    SELECT *
    INTO Persons 
    IN 'Backup.mdb'
    FROM Persons

    可以在最后添加 WHERE 子句,也能使用join从一个以上的表中选取数据

    10.CREATE DATABASE 语句

    CREATE DATABASE 用于创建数据库。

    CREATE DATABASE database_name

    11.CREATE TABLE 语句

    CREATE TABLE 语句用于创建数据库中的表。

    CREATE TABLE 表名称
    (
    列名称1 数据类型,
    列名称2 数据类型,
    列名称3 数据类型,
    ....
    )

    12.SQL 约束

    约束用于限制加入表的数据的类型。

    可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

    主要有以下几种约束:

    • NOT NULL
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY
    • CHECK
    • DEFAULT

    SQL NOT NULL 约束

    NOT NULL 约束强制列不接受 NULL 值。

    NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

    例子:

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

    SQL UNIQUE 约束

    UNIQUE 约束唯一标识数据库表中的每条记录。

    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

    PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

    请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

    下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    UNIQUE (Id_P)
    )

    或者

    CREATE TABLE Persons
    (
    Id_P int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

    如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
    )

    当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:

    ALTER TABLE Persons
    ADD UNIQUE (Id_P)

    如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

    ALTER TABLE Persons
    ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

    如需撤销 UNIQUE 约束,请使用下面的 SQL:

    ALTER TABLE Persons
    DROP CONSTRAINT uc_PersonID

    SQL PRIMARY KEY 约束

    PRIMARY KEY 约束唯一标识数据库表中的每条记录。

    主键必须包含唯一的值。

    主键列不能包含 NULL 值。

    每个表都应该有一个主键,并且每个表只能有一个主键。

    下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 PRIMARY KEY 约束:

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (Id_P)
    )

    或者

    CREATE TABLE Persons
    (
    Id_P int NOT NULL PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

    如果需要命名约束,以及为多个列定义约束、表已存在的情况下创建或命名、撤销约束。语法和上述UNIQUE相同。

    SQL FOREIGN KEY 约束

    一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

    FOREIGN KEY 约束用于预防破坏表之间连接的动作。

    FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

    下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:

    CREATE TABLE Orders
    (
    Id_O int NOT NULL,
    OrderNo int NOT NULL,
    Id_P int,
    PRIMARY KEY (Id_O),
    FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
    )

    或者

    CREATE TABLE Orders
    (
    Id_O int NOT NULL PRIMARY KEY,
    OrderNo int NOT NULL,
    Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
    )

    如果需要命名约束,以及为多个列定义约束、表已存在的情况下创建或命名、撤销约束。语法和上述UNIQUE相同。

    SQL CHECK 约束

    CHECK 约束用于限制列中的值的范围。

    如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

    如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

    下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CHECK (Id_P>0)
    )

    或者

    CREATE TABLE Persons
    (
    Id_P int NOT NULL CHECK (Id_P>0),
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

    如果需要命名约束,以及为多个列定义约束、表已存在的情况下创建或命名、撤销约束。语法和上述UNIQUE相同。

    SQL DEFAULT 约束

    DEFAULT 约束用于向列中插入默认值。

    如果没有规定其他的值,那么会将默认值添加到所有的新记录。

    下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
    )

    通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

    CREATE TABLE Orders
    (
    Id_O int NOT NULL,
    OrderNo int NOT NULL,
    Id_P int,
    OrderDate date DEFAULT GETDATE()
    )

    如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:

    ALTER TABLE Persons
    ALTER (COLUMN) City SET DEFAULT 'SANDNES'

    如需撤销 DEFAULT 约束,请使用下面的 SQL:

    ALTER TABLE Persons
    ALTER (COLUMN) City DROP DEFAULT

    13.CREATE INDEX 语句(索引)

    用于在表中创建索引。

    在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

    理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

    SQL CREATE INDEX 语法

    在表上创建一个简单的索引。允许使用重复的值:

    CREATE INDEX index_name
    ON table_name (column_name)
    

    注释:"column_name" 规定需要索引的列。

    在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

    CREATE UNIQUE INDEX index_name
    ON table_name (column_name)

    本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:

    CREATE INDEX PersonIndex
    ON Person (LastName) 

    可以索引不止一个列,在括号中列出这些列的名称,用逗号隔开。

    14.DROP 语句

    通过使用 DROP 语句,可以轻松地删除索引、表和数据库。

    删除索引

    DROP INDEX index_name ON table_name

    DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):

    DROP TABLE 表名称

    DROP DATABASE 语句用于删除数据库:

    DROP DATABASE 数据库名称

    如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?

    请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):

    TRUNCATE TABLE 表名称

    15.ALTER TABLE 语句

    ALTER TABLE 语句用于在已有的表中添加、修改或删除列

    如需在表中添加列,请使用下列语法:

    ALTER TABLE table_name
    ADD column_name datatype

    要删除表中的列,请使用下列语法:

    ALTER TABLE table_name 
    DROP COLUMN column_name

    16.AUTO INCREMENT 字段(自增)

    我们通常希望在每次插入新记录时,自动地创建主键字段的值。

    我们可以在表中创建一个 auto-increment 字段。

    例子:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)
    )

    默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。

    要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:

    ALTER TABLE Persons AUTO_INCREMENT=100

    要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):

    17.SQL CREATE VIEW 语句(视图)

    什么是视图?

    在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

    视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition

    可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。

    样本数据库 Northwind 拥有一些被默认安装的视图。视图 "Current Product List" 会从 Products 表列出所有正在使用的产品。这个视图使用下列 SQL 创建:

    CREATE VIEW [Current Product List] ASSELECT ProductID,ProductNameFROM ProductsWHERE Discontinued=No

    我们可以查询上面这个视图:

    SELECT * FROM [Current Product List]

    Northwind 样本数据库的另一个视图会选取 Products 表中所有单位价格高于平均单位价格的产品:

    CREATE VIEW [Products Above Average Price] ASSELECT ProductName,UnitPriceFROM ProductsWHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) 

    您可以使用下面的语法来更新视图:

    CREATE OR REPLACE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
    

    现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:

    CREATE VIEW [Current Product List] AS
    SELECT ProductID,ProductName,Category
    FROM Products
    WHERE Discontinued=No

    您可以通过 DROP VIEW 命令来删除视图。

    DROP VIEW view_name

    18.SQL 日期

    MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

    • DATE - 格式 YYYY-MM-DD
    • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
    • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
    • YEAR - 格式 YYYY 或 YY

    如果不涉及时间部分,那么我们可以轻松地比较两个日期!

    如果您希望使查询简单且更易维护,那么请不要在日期中使用时间部分!

    19.SQL NULL 值

    如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

    NULL 值的处理方式与其他值不同。

    NULL 用作未知的或不适用的值的占位符。

    无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。

    我们必须使用 IS NULL 和 IS NOT NULL 操作符。

    请始终使用 IS NULL 来查找 NULL 值。

    Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数

    【语法】NVL (expr1, expr2)
    【功能】若expr1为NULL,返回expr2;expr1不为NULL,返回expr1。
    注意两者的类型要一致 
    
    

    三、SQL 函数

    SQL 拥有很多可用于计数和计算的内建函数。

    内建 SQL 函数的语法是:

    SELECT function(列) FROM 表
    

    1.SQL AVG 函数

    AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

    SQL AVG() 语法

    SELECT AVG(column_name) FROM table_name

    2.SQL COUNT() 函数

    COUNT() 函数返回匹配指定条件的行数。

    SQL COUNT() 语法

    SQL COUNT(column_name) 语法

    COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):

    SELECT COUNT(column_name) FROM table_name

    SQL COUNT(*) 语法

    COUNT(*) 函数返回表中的记录数:

    SELECT COUNT(*) FROM table_name

    SQL COUNT(DISTINCT column_name) 语法

    COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:

    SELECT COUNT(DISTINCT column_name) FROM table_name

    3.FIRST() 函数

    FIRST() 函数返回指定的字段中第一个记录的值。

    提示:可使用 ORDER BY 语句对记录进行排序。

    SQL FIRST() 语法

    SELECT FIRST(column_name) FROM table_name

    4.LAST() 函数

    LAST() 函数返回指定的字段中最后一个记录的值。

    提示:可使用 ORDER BY 语句对记录进行排序。

    SQL LAST() 语法

    SELECT LAST(column_name) FROM table_name

    5.MAX() 函数

    MAX 函数返回一列中的最大值。NULL 值不包括在计算中。

    SQL MAX() 语法

    SELECT MAX(column_name) FROM table_name

    注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。

    6.MIN() 函数

    MIN 函数返回一列中的最小值。NULL 值不包括在计算中。

    SQL MIN() 语法

    SELECT MIN(column_name) FROM table_name

    注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。

    7.SUM() 函数

    SUM 函数返回数值列的总数(总额)。

    SQL SUM() 语法

    SELECT SUM(column_name) FROM table_name

    8.GROUP BY 语句

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

    SQL GROUP BY 语法

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name

    例子:

    希望查找每个客户的总金额(总订单)。(每个客户有多个订单)

    我们想要使用 GROUP BY 语句对客户进行组合。

    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer

    原表

    结果:

    9.HAVING 子句

    在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

    SQL HAVING 语法

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    HAVING aggregate_function(column_name) operator value

    现在,我们希望查找订单总金额少于 2000 的客户。

    我们使用如下 SQL 语句:

    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer
    HAVING SUM(OrderPrice)<2000
    

    10.UCASE() 函数

    UCASE 函数把字段的值转换为大写。

    SQL UCASE() 语法

    SELECT UCASE(column_name) FROM table_name

    11.LCASE() 函数

    LCASE 函数把字段的值转换为小写。

    SQL LCASE() 语法

    SELECT LCASE(column_name) FROM table_name

    12.MID() 函数

    MID 函数用于从文本字段中提取字符。

    SQL MID() 语法

    SELECT MID(column_name,start[,length]) FROM table_name
    column_name必需。要提取字符的字段。
    start必需。规定开始位置(起始值是 1)。
    length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

    现在,我们希望从 "City" 列中提取前 3 个字符。

    我们使用如下 SQL 语句:

    SELECT MID(City,1,3) as SmallCity FROM Persons

    13.LEN() 函数

    LEN 函数返回文本字段中值的长度。

    SQL LEN() 语法

    SELECT LEN(column_name) FROM table_name

    14.ROUND() 函数

    ROUND 函数用于把数值字段舍入为指定的小数位数。

    SQL ROUND() 语法

    SELECT ROUND(column_name,decimals) FROM table_name

    15.NOW() 函数

    NOW 函数返回当前的日期和时间。

    提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。

    SQL NOW() 语法

    SELECT NOW() FROM table_name

    16.FORMAT() 函数

    FORMAT 函数用于对字段的显示进行格式化。

    SQL FORMAT() 语法

    SELECT FORMAT(column_name,format) FROM table_name
    参数描述
    column_name必需。要格式化的字段。
    format必需。规定格式。

     

    现在,我们希望显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD")。

    我们使用如下 SQL 语句:

    SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
    FROM Products
    

     

    ----------------------------------------

     

    欢迎关注公众号“编程江湖”,可以领取Java、Python、微信小程序等诸多学习资料和项目源码,还能查看精品技术文章,并给大家提供了CSDN资源下载服务

    ​​

    展开全文
  • Oracle数据库sql语句的执行

    千次阅读 2018-11-27 11:33:23
    0. 基础 MySQL mysql-8.0.12-win64bit Navicat Premium navicat120_premium_cs_x64 系统 ...Oracle数据库安装配置 ...MySQL数据库sql语句的执行   1. 常用sql语句 所用数据下载 ...
  • mysql数据库常用sql语句

    万次阅读 多人点赞 2018-11-03 21:10:01
    数据库可以用图形化工具来实现一系列操作,这里涉及一些cmd命令行 首先要配置好环境变量可以全局操作命令,不然只能在mysql的安装目录下进行操作,这里不再叙述 1. 进入数据库: mysql -u root -p (默认用户名为...
  • MySQL数据库SQL语句的执行过程

    万次阅读 多人点赞 2021-02-22 03:59:20
    我们的系统在和 MySQL 数据库进行通信前,需要先和数据库建立连接,而这个功能就是由MySQL驱动底层帮我们完成的,建立完连接之后,我们只需要发送 SQL 语句就可以执行 CRUD 了。如下图所示: 一次 SQL 请求就会...
  • 达梦8数据库操作语法
  • SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢
  • MySQL数据库SQL语句

    2018-09-01 19:55:44
    MySQL数据库SQL语句 操作数据库SQL语句(DDl) 1.增 * 创建一个指定名称的数据库: create database 数据库名称; * 创建数据库,判断不存在,再创建: create database if not exists 数据库名称; * 创建...
  • MySql数据库SQL语句的全面总结

    千次阅读 2020-09-16 15:20:58
    SQL语言共分为四大类:数据查询...1.2 DROP——表的删除 1.3 ALTER——更改表 1.4 TRUNCATE——截断表 2.数据操作语言——DML 2.1 INSERT 往表中插入记录 批量插入多条记录 2.2 UPDATE子句修改数据库中数据 2.3 DELET
  • Oracle数据库常用Sql语句大全

    千次阅读 多人点赞 2018-07-14 11:35:59
    一、数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录语句)INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ...
  • MySQL数据库sql语句的执行

    千次阅读 2018-10-24 16:50:12
    0. 基础 MySQL mysql-8.0.12-win64bit Navicat Premium navicat120_premium_cs_x64 系统 Windows7-64bit-旗舰版 ...MySQL数据库安装配置 ...1. 利用Navicat Premium操作MySQL数据库 查看MySQL...
  • Oracle数据库SQL语句操作记录

    千次阅读 2015-12-22 10:15:56
    Oracle数据库SQL语句操作,包括创建用户并分配表空间权限、表操作、触发器序列、SQL基本操作、一些基础函数的操作等。
  • 有时候需要把数据库中表记录删除掉,为了方便我们有必要制作一个清空数据库的脚本, 这里主要是考虑存在外键约束,和标识列问题。 存在外键关系时候就要查询出,先要删除哪一张表,后要删除哪一张表, 当存在标识...
  • 2.查看执行时间长的sql语句 SELECT * FROM V$LONG_EXEC_SQLS; SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS; 3.设置当前模式 SET SCHEMA schema_name; 4.创建表空间 CREATE TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' SIZE ...
  • 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。 所谓“数据库”是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与...
  • WINCC -VBScript脚本操作-SqlServer Function WinCCDataSQL(strSQL) Dim wms_ConnStr,... '打开数据库 wms_ConnStr = "driver=sqL server;SERVER=127.0.0.1\WINCC;DATABASE=JSHRDB;UID=sa;PWD=sa"' 登陆字 S...
  • 网站数据库种马数据库中很多表存在大量相同记录经高人指点删除相同记录(仅保留一个)的SQL语句如下declare @tmptb TABLE ( [ID] [int] NOT NULL , [SortName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , ...
  • 数据库 sql语句

    千次阅读 2014-12-26 03:01:23
    (1)利用SQL Server Management Studio在teaching数据库中创建表student,表的结构件附件1。   createtable student (classnochar(20) ... ,classname varchar(50),departmentchar(20...(2)利用Transact-SQL语句
  • 1.sql语句中的单行注释 2.多行注释 3. 新建数据库 4.删除数据库 5. 创建表 6.MySQL 删除数据表 7.MySQL 插入数据 8.MySQL 查询数据 9.MySQL UPDATE 更新记录 10.MySQL DELETE 语句删除记录 11.MySQL LIKE 模糊查询 ...
  • 工作常用数据库SQL语句汇总

    千次阅读 2015-08-21 17:05:00
    数据库操作SQL语句  1. 显示服务器上当前存在什么数据库 SHOW DATABASES; 2. 创建名称为rewin的数据库 CREATE DATABASE rewin; 3. 删除名称为rewin的数据库 DROP DATABASE rewin; ...
  • 大家可能会碰到以下几种情况:1.存在部分字段相同的纪录,即有唯一键主键ID(最常见情况)如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组...2、存在两条完全相同的记录(...
  • 数据库SQL语句总结大全

    千次阅读 多人点赞 2020-02-28 10:24:39
    数据库基础概念二.SQL概述1)分类2)相关概念3) 增删改案例①DDL②DML 一.数据库基础概念 数据库就是用来存储和管理数据的仓库! 二.SQL概述 SQL(Structured Query Language)是“结构化查询语言”,它是对关系...
  • 本文主讲数据库中 游标CURSOR...将SQL嵌入到高级语言中混合编程,SQL语句负责操纵数据库,高级语言语句负责控制逻辑流程。 数据库工作单元与源程序工作单元之间的通信主要包括: (1) 向主语言传递SQL语句的执行状态信...
  • 如果删除了表格中含有自动编号字段的一个记录后,Access并不会为表格自动编号字段重新编号。当添加某一记录时,Access不再使用已被删除的自动编号字段的数值,而是重新按递增的规律重新赋值。   是/否:这种字段是...
  • 删除数据库表数据SQL语句

    千次阅读 2019-01-11 14:50:21
    truncate table tbFolder
  • delete from allTData where crt_time&lt;'2017-05-31 00:00:00' 这是删除指定日期2017年5月31日0点之后的数据
  • 数据库:原生sql语句写法

    千次阅读 2019-01-05 19:06:30
    1.SQL语句 1.1什么是SQL语句: SQL:结构化查询语言。关系数据库语言的国际标准。 各个数据库厂商都支持ISO的SQL标准:如普通话 各个数据库厂商在标准基础做了自己的扩展:如方言 1.2 SQl分类 数据定义语言:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 313,171
精华内容 125,268
关键字:

删除数据库记录的sql语句