由于在笔试中遇到写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. 用Hexo在GitHub上搭建个人博客

    我用Hexo在GitHub上搭建好了自己的博客,我的这第一篇博客就来说说搭建的过程. 1 环境配置 本文使用环境如下: Windows 10 node.js v8.1.3 git v2.13.2 np ...

  2. 随机模拟(MCMC)

    http://cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/ http://blog.csdn.net/lin360580306/article/ ...

  3. request.getServletPath(),request.getContextPath()

    2018-11-24  16:34:33 1. getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括. 2. getPageInfo ...

  4. pymysql 数据库操控

    模块安装 pip install pymysql 执行sql语句 import pymysql #添加数据 conn = pymysql.connect(host='127.0.0.1', port= ...

  5. Qt && 常量中有换行符 && 中文

    [1]VS + QT开发环境,中文内容编译时提示错误error C2001:常量中有换行符 解决方案:VC的编译器,把代码格式改为带BOM的UTF8就好了 建议步骤: (1)用Notepad++打开c ...

  6. SLAM学习笔记 - 视觉SLAM方法资源汇总

    工具类: ros框架 linux系列教程     vim Eigen     Eigen快速入门 Pangolin  Pangolin安装与使用 数据集: TUM         数据格式 提供pyt ...

  7. python 内置函数format

    Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...

  8. Presto上使用SQL遇到的一些坑

    本文转载自:https://segmentfault.com/a/1190000013120454?utm_source=tag-newest 最近换了新工作,在数据处理方面,公司是用Presto连接 ...

  9. linux监控性能和网络的命令

    vmstat查看机器实时的综合情况:load,内存,swap,cpu使用率等方面 procs: r:运行队列中进程数量 b:等待IO的进程数量 memory(内存): swpd:使用虚拟内存大小 fr ...

  10. ad 原件布局布线基本规则

    一.原件布局基本规则 1.按照电路模块进行布局,电路中的元件应该采用集中就近原则,同时数字电路和模拟电路分开: 2.定位孔.标准孔等周围1.27mm内不得贴元器件,安装孔周围3.5mm不得特装元件 3 ...