由于在笔试中遇到写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. PHP运行脚本

    PHP运行脚本 php.exe -f "php文件" php.exe -r "php代码" 例如:在cmd中 C:\Users\Administrator.SK ...

  2. meta 跳转

    强无敌. 是否厌倦了页面枯燥的跳转? 试试这样的跳转吧. Duration:表示滤镜特效的持续时间(单位:秒) Transition:滤镜类型.表示使用哪种特效,取值为0-23. <Meta h ...

  3. 转:php 5.5源码安装全过程

    下载 PHP 源码包 # wget http://cn2.php.net/distributions/php-5.5.15.tar.bz2 # tar xf php-5.5.15.tar.bz2 -C ...

  4. spring4.0.0 源码导入eclipse(sts)

    其余步骤请见:http://www.cnblogs.com/xiluhua/p/7450972.html 执行 gradle eclipse -x :eclipse 报错: 解决办法: 找到 行,注释 ...

  5. 详解:PHP加速器配置神器opcache

    什么是opcode? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少CP ...

  6. GoldenGate实时投递数据到大数据平台(6)– HDFS

    GoldenGate可以实时将RDBMS的数据投递到HDFS中,在前面的文章中,已经配置过投递到kafka, mongodb等数据平台,本文通过OGG for bigdata的介质中自带的示例演示实时 ...

  7. 怎样从外网访问内网php-fpm?

    本地安装了一个php-fpm,只能在局域网内访问,怎样从外网也能访问到本地的php-fpm呢?本文将介绍具体的实现步骤. 准备工作 安装并启动php-fpm 默认安装的php-fpm端口是9000. ...

  8. 再论sklearn分类器

    https://www.cnblogs.com/hhh5460/p/5132203.html 这几天在看 sklearn 的文档,发现他的分类器有很多,这里做一些简略的记录. 大致可以将这些分类器分成 ...

  9. MySQL备份与恢复-mydumper

    上一片博文中,我们说明了mysqldump的备份与恢复.因为mysqldump是单线程导出,单线程恢复的,因此备份与恢复的时间比较长! 首先来安装mydumper: 下载源码:https://gith ...

  10. pyqt5 树节点点击实现多窗口切换

    # coding=utf-8 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui ...