由于在笔试中遇到写sql语句的题目,犯了低级错误,这里学习并总结一下,遇到相关的继续更新。。。

数据定义


1.创建数据库

  • create database testdb;

2.创建空表

需要指明表明、字段名及其属性

  • crate table usertb (uid int, name varchar(4));

3.创建索引

在表或者表的常用列上创建索引加速查询。

  • create index tIndex on table1 (tid);

4.删除索引

  • mysql中alter table table1 drop index tIndex;

5.创建视图

  • 视图定义后可以当作基本表使用。
  • 组成视图的属性列名全部指定或者全部省略。关系数据库管理系统执行创建视图命令只是将视图的定义存入数据字典中,在对视图查询时才执行其中的SELECT语句。
  • create view vstu (sname) as select sname from student;

6. 删除视图

  • drop view vstu;
  • 视图的作用:
    • 简化用户操作
    • 关注需要的数据
    • 保护机密数据
    • 清晰的表达某些查询

7.修改表结构

使用alter语句修改

  • 添加、删除、修改列

    • alter table table1 add column context varchar(255);
    • later table table1 drop column context;
    • alter table table 1 modify column context char(50);
  • 修改表结构,改变表字段的约束
    • 修改约束alter table table1 modify id not null;
    • 添加约束alter table table1 add unique (id);

数据查询

使用select [distinct] from语句,返回数据库中的数据,distinct用于合并相同的值,返回唯一不同的值。


1.单表查询

单表查询指仅涉及一个表的查询。可以通过where子句查询满足条件的元组的全部或者部分属性列。

  • 查询条件

    • 比较运算,=、<>、>=等、NOT+比较运算符
    • 范围,[NOT] BETWEEN AND
    • 集合,[NOT] IN
    • 字符匹配,[NOT] LIKE,使用%(代表任意字符串)和_(代表单个字符)通配符
    • 空值,IS [NOT] NULL
    • 多重条件,AND、OR、NOT
  • 聚集函数
    • COUNT()统计元组个数
    • SUM([distinct])
    • AVG()
    • MAX()
    • MIN()
    • 注意:只有count(*)处理空值(因为空值不影响计数,其他函数跳过空值);聚集函数只能用于select子句和group by中的having子句中,不能用于where子句中。
  • GROUP BY
    • 对查询结果分组,用于细化聚集函数的作用对象,即聚集函数作用于每一组。
    • 如果分组后还需要筛选,使用HAVING短语指定条件。
    • WHERE子句作用于基本表或者视图,从中选择满足条件的元组;而HAVING短语作用于组,从中选择满足条件的组。
  • ORDER BY
    • 对查询结果按指定属性列排序,默认升序(ASC),可以使用DESC指定降序。

2.连接查询

连接查询指涉及两个以上的表的查询。需要使用where子句作为连接条件。

  • 等值连接:连接运算符为=
  • 非等值连接:连接运算符非=
  • 自然连接:在等值连接中去掉目标列中的重复列
  • 自身连接:一个表与自己进行连接,需要取两个别名
  • 外连接:将表的悬浮元组也保存在结果关系中,而将其他属性上填空值。INNER JOIN ON
    • 左外连接:只保留左边关系的悬浮元组,LEFT JOIN ON
    • 右外连接:只保留右边关系的悬浮元组,RIGHT JOIN ON

3.嵌套查询

将一个SELECT-FROM-WHERE语句嵌套在另一个查询块的WHERE子句或者HAVING短语条件中的查询称为嵌套查询。

  • 上层查询块称为父查询,下层查询块称为子查询。
  • 子查询的SELECT语句不能使用ORDER BY子句,ORDER BY子句只能对最终结果排序。
    • 相关子查询:子查询的查询条件依赖于父查询。
      先从外层查询中取一个元组传给内层查询,执行内存查询后的结果再作为条件进行外层查询,需要反复求值直到外层查询的元组全部处理完毕。
    • 不相关子查询:子查询的查询条件不依赖于父查询。由里向外先执行子查询,进而作为条件进行父查询。

4.集合查询

SELECT语句查询结果为元组的集合,因此可以对多个SELECT语句的结果进行集合操作。进行集合操作的集合必须具有相同的属性列及其数据类型。

  • 并操作UNION
  • 交操作INTERSECT
  • 差操作EXCEPT

5. IF查询

IF(条件表达式,"结果为true",'结果为false')


6. 临时表查询

select得出一个临时表,然后在外层使用select where关联这张临时表;
用于一个表生成的数据与原数据对比。

数据更新


1.插入数据

  • insert into usertb (uid, name) values(1000, 'zhangsan');

2.修改数据

update语句用来更新表中的一行记录。

  • 样例:update table1 set name='www', context='baidu' where id=1000;
  • 注意:一定要使用where子句,否则会更新整个表的数据,mysql数据库可以使用set sql_safe_updates=1;命令来开启强制使用where子句

3.删除数据

  • delete语句用来删除表中的记录。

    • 样例:删除一条记录使用delete from table1 where name='www';
    • 删除所有记录使用delete from table1;或者delete * from table1;,但是表的结构还在,只是数据被删除
  • drop语句直接删除一个表或者数据库,并释放空间。
    • 样例:drop table table1;或者drop database testdb;
  • truncate语句删除一个表中的所有数据,并释放空间,表结构还在。
    • 样例:truncate table table1;
  • 三者比较

分页

返回指定数目的记录对于大数据量记录的表非常有用。


1.mysql使用limit分页

select * from table limit M,N; 表示从表中取M之后的N条记录,不包含M。如果数据量很大导致M很大,则MySQL会先扫描前M条记录导致性能下降,所以需要优化。
limit优化通常是先用主键索引到初始位置M,再截取需要的记录。优化方法有三种:

  • 先通过条件限定主键位置,再从该位置开始截取后面的记录
    select * from table where table.id > M order by table.id limit N;
  • 使用子查询限定主键位置,再从该位置开始截取后面的记录
    select * from table where table.id > (select id from table limit M,1) limit N;
  • 如果主键有序不变,使用BETWEEN AND直接限定范围

2. Oracle使用rownum分页

  • 样例:select * from table1 where rownum<=5;

3.sql server、access使用top分页

top后可以直接跟数字或者百分比

  • 样例:select top 50 percent * from table1;

复制表(备份)

涉及insert into select 和select into from两种形式的语句


1.Oracle数据库

  • select * into table2 from table1;要求table2不存在,运行结果会自动插入到新建的表中
  • insert into table2 select * from table1;要求table2必须存在

2.MySQL数据库

  • table2不存在时,运行select into from语句会报错1327 - Undeclared variable: table2,即MySQL不支持这种写法,转换为create table table2 select * from table1;
  • table2存在时可以使用insert into from语句

SQL语句执行顺序

推荐这篇完整博文:https://www.cnblogs.com/huminxxl/p/3149097.html

数据库03_SQL语句的更多相关文章

  1. 数据库DDL语句书写规范

    数据库DDL语句书写规范 1.SQL语句编写说明编写SQL语句应遵循统一的规范,包括大小写.空格.换行.缩进等等,只有完全一样的SQL才能在数据库中共享,从而减少硬解析. 字段类型.长度:根据数据情况 ...

  2. 数据库 SQL语句优化

    温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走. 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图 ...

  3. 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

  4. 数据库SQL语句性能优化

    选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下 ...

  5. 数据库查询语句报错-ORA-00911: invalid character

    数据库查询语句报错-ORA-00911: invalid character 根据自己经验总结下: 1.都是分号惹的祸,有时候sql语句后面有分好导致这种错误 2.还有一种是从别处copy过来的sql ...

  6. 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...

  7. (转载)常用的Mysql数据库操作语句大全

    打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...

  8. 数据库操作语句类型(DQL、DML、DDL、DCL)

    数据库操作语句类型(DQL.DML.DDL.DCL)简介 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语 ...

  9. 数据库-Mysql语句

    Mysql语句 不定时更新 1.数据库相关的语句 /* 数据库操作 */ ------------------ -- 启动MySQL net start mysql -- 接与断开服务器 mysql ...

随机推荐

  1. django 设置不带后缀的访问路径

    在urls.py 设置空路径,并指向对应的html文件 url(r'^$', views.index),

  2. C# 自定义用户控件

    上篇:控件制作 本例是制作一个简单的自定义控件,然后用一个简单的测试程序,对于初学者来说,本例子比较简单,只能起到抛石引玉的效果.我也是在学习当中,今后会将自己所学的逐步写出来和大家交流共享. 第一步 ...

  3. GDB && QString

    [1]GDB && QString GDB的print命令仅能打印基本数据类型,而像QString这样的复杂类型就无能为力了! 如果调试时不能看QString的值,很让人抓狂!!!幸好 ...

  4. 仿照admin实现一个自定义的增删改查的组件

    1.首先,创建三个项目,app01,app02,stark,在settings里边记得配置.然后举例:在app01的model里边写表,用的db.sqlite3,所以数据库不用再settings里边配 ...

  5. 设计模式之Observer(观察者)(转)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  6. android Observable api请求参数设置注解问题

    android Observable api请求参数设置注解问题 2018-10-29 20:05:24.919 11786-11786/xxx E/wxh: getQuote=USD getBase ...

  7. .net core创建项目(指令方式)

    所谓的指令创建项目,就是不用再已安装的VS2015的环境下或者VS Core下创建,直接通过DOS指令创建也是OK的. 1.找到你所准备保存项目的项目文件夹(你也可以到某个目录用指令创建项目文件夹[  ...

  8. Linux sed 命令字符串替换使用方法详解

    1. sed替换的基本语法 sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义.2. 单引号” ‘ ’”是没有办法用反斜线” ...

  9. MySQL修改库名的方法

    先创建新的库,再用RENAME TABLE 语句移动旧库中的表到新库,最后删除旧库. (root@localhost) [(none)] create database mydb_2; Query O ...

  10. jquery获取包含本身的元素

    我们知道,使用jquery获取一个元素内的所有元素非常容易,使用jQuery.html()就可以. 如果是js语法的话,使用domObj.innerHTML也很容易实现. 那么问题来了,要想获取包涵节 ...