由于在笔试中遇到写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. 激活win10

    网盘地址 http://pan.baidu.com/s/1nvc5I1V 里面是2个东西,一个是rar解压缩软件,一个是激活工具本体 一个解压缩软件,一个激活工具的压缩包 安装解压软件,就是WINRA ...

  2. iframe使用

    iframe是一个前端页面的内联框架(即行内框架),使用很方便, <!--嵌套子页面--> <script type="text/x-template" id=& ...

  3. JAVA基础3---运算符大全

    Java中的运算符有以下种类:算术运算符.关系运算符.位运算符.逻辑运算符.赋值运算符.其他的运算符 现在假设定义 int A = 10,B = 5: 一.算术运算符 运算符 描述 案例 + 等同于数 ...

  4. CXF框架入门(重点)

    l CXF是一个开源的webservice框架 l CXF支持的协议:SOAP.XML/HTTP等 l CXF可以很好的和spring集成 l CXF可以部署到tomcat.jboss.jetty等服 ...

  5. NodeJS,JavaScript正在吞噬这个世界

    NodeJS,JavaScript正在吞噬这个世界 NodeJS,一个基于Google Chrome V8 JS引擎的服务器端JavaScript运行时,曾经被认识只是一个赶时髦的技术,有谁会想到,它 ...

  6. Codeforce 835A - Key races

    Two boys decided to compete in text typing on the site "Key races". During the competition ...

  7. bzoj3196 二逼平衡树

    题目链接 平衡树系列最后一题 坑啊 10s时间限制跑了9764ms...还是要学一学bit套主席树啦... 经典的线段树套treap...至于第一发为什么要TLE(我不会告诉你treap插入的时候忘了 ...

  8. Integer诡异特性

    package 代码测试; public class ceshi { public static void main(String[] args) { Integer i1=100; Integer ...

  9. ubuntu重启+sublime快捷键

    sudo reboot Sublime常用快捷键: 掌握基本的代码编辑器的快捷键,能让你打码更有效率,刚开始可能不大记得住,多敲几次就能熟悉并使用它 精华键 : Ctrl+Shift+P:打开命令面板 ...

  10. QT多线程简单例子

    在Qt中实现多线程,除了使用全局变量.还可以使用信号/槽机制. 以下例子使用信号/槽机制. 功能: 在主线程A界面上点击按钮,然后对应开起一个线程B.线程B往线程A发送一个字符串,线程A打印出来. 1 ...