由于在笔试中遇到写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. html5-微格式-时间的格式

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  2. eclipse maven install没反应解决办法

    .打开eclipse的Window菜单-->java-->Installed JREs .点击用的jdk,edit,在Default VM arguments里面填入-Dmaven.mul ...

  3. Apache+Tomcat+Memcached实现会话保持

    会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...

  4. Beta分布深入理解

    一些公式 Gamma函数 (1) 贝叶斯公式 (2) 贝叶斯公式计算二项分布概率 现在有一枚未知硬币,我们想要计算抛出后出现正面的概率.我们使用贝叶斯公式计算硬币出现正面的概率.硬币出现正反率的概率和 ...

  5. Linux Centos下查看cpu、磁盘、内存使用情况,关闭MySQL日志

    Linux Centos下查看cpu.磁盘.内存使用情况,关闭MySQL日志 lsblk 查看分区和磁盘df -h 查看空间使用情况fdisk -l 分区工具查看分区信息cfdisk /dev/sda ...

  6. 利用iOS中Safari浏览器创建伪Web App

    在safari浏览器里有一个“添加到主屏幕”选项,我们可以用来创建伪Web App,下面来了解一下iOS中Safari的私有属性 第一步设置Web App的主屏幕图标: 有两种属性值apple-tou ...

  7. tft屏图像文字一起显示

    2010-05-04 21:06:00 M16内部flash只有16k,要做数码相框,只能用usart通信了.明天继续研究.

  8. [转载]Oracle PL/SQL之LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  9. Navicat连接MySQL8.0亲测有效

    今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错. 试了很多种方法,终于找到一种可以实现的: 更 ...

  10. VMWare常用快捷键

    VMWare常用快捷键 Ctrl-Alt-Enter    进入全屏模式 ctrl+alt+insert      退出全屏 Ctrl-Alt            返回正常(窗口)模式 Ctrl-A ...