数据库查询语言(Structured Query Language)

数据库查询语言:

DDL(data definition language) -数据定义语言,建库建表

DML (data manipulate language ) -数据操作语言,增删改

DQL (data query language) -数据查询语言

1.DDL(data definition language)

1.库操作

1.查看数据库
show databases 2.查看数据库创造过程
SHOW CREATE DATABASE 3.创建数据库
CREATE DATABASE 数据库名 4.查看数据库
SHOW SCHEMAS; 5.修改数据库(只能修改数据的默认字符编码)
ALTER DATABASE DB CHASET GBK; 6.删除库
drop database db1;

2.表操作

1.查看表
show tables 2.查看所有列
SHOW COLUMNS FROM tablename 3.查找表创建过程
SHOW CREATE TABLE 4.查看用户权限
SHOW GRANTS; 5.创建表
create table tb1(
id int,
name varchar(20)
) 6.删除表
drop table tb 7.删除重建
truncate table tb

单表修改操作

 1.修改表名
rename table tb1 to tb2 2.增加字段
Alter table tb2
add col varchar first;
-first 表示加到最前面
-after 表示加到某个字段之后 3.修改字段名
alert table tb1
change col1 col2 varcha4(100) 4.修改字段类型
alert table tb1
modify col decimal(3,2) 5.修改字段位置
alert table tb
modify col varchar(100) first; 6.删除字段
alter table tb2
drop column col1;

1.3创建表取值约束(对字段取值范围进行约束)

关键字 知识点 备注
not NULL值 NULL值表示没有值。但是''双单引号表示一个有效的值。
不同点,NULL还是占数据库存储空间的,但是''双单引号不占存储空间
primary key 1.主键可以是单列也可以是多列;
2.主键只允许非NULL值的列
3.主键默认有索引;4.主键是唯一的,不重复的
AutoIncrement 自动增加 自增主键,通过的LAST_INSERT_ID( )函数可以查看
自增主键不能回退;
可以手动的插入一个手动的值,如果这个值是表中的最大值,下一个自增值会从这个自增值开始增长;
填入null时自动增加
default value 设置默认值
unique 表示字段不能重复,允许重复的null值
foeign key 外键约束,限制某个字段的取值,只能取另一个键的值
增加外键,会相应增加外键索引。但是删除外键不能删除外键索引,要单独删除索引

详细语法

非空约束(NOT NULL)

1.添加非空约束
create table tb2(
col varchar(10) not null
) alter table tb
modify col varchar(10) not null 2.取消非空约束
alter table tb
modify col varchar(10); alter table tb
modify col varchar(10) null;

主键约束(primary key)

1.添加主键
creat table tb(
id int primary key ;
)
creat table tb(
id int ;
name varchar(20);
primary key (id,name);
) 2.删除及修改主键
alter table tb
add primary key(id); alter table tb
drop primary key(id);

自增(一般用域主键自增)

creat table tb(
id int primary key auto_increment ;
)

外键约束

1.创建外键
create table tb1(
id int,
foreign key (x) reference tb(id)
) 2.修改删除外键
alter table tb
drop foreign key(id) reference tb1(id)

2.DML (data manipulate language )数据操作语言

2.1 insert

1.插入单行数据和插入多行数据

insert int tb (col1,col2,col3) values(val1,val2,val2);
insert int tb (col1,col2,col3) values(val1,val2,val2);
insert int tb (col1,col2,col3) values(val1,val2,val2); 批量插入: insert int tb (col1,col2,col3) values(val1,val2,val2),(val1,val2,val2),(val1,val2,val2); 2. 插入其他表的数据
insert into tb(col1,col2) select col1,col2 from tb2 insert into tb1 select * from tb

2.2 update

update table set col=1 

2.3 delete

delete from table

全部删除建议使用truncate table ,因为delete 的原理时逐条删除数据;truncate table是删除表再新建表

3.DQL (data query language) -数据查询语言

3.1 简单查询

select col from tb

select * from tb

3.2 过滤及排序

关键字 知识点 备注
ORDER BY 1.排序两种状态,DESC 和 ASC ,默认ASC
2.可以同时按照多列排序,排序规则按照排序列的顺序,前一个字段相同时才按照后一个字段排序;
WHERE 获取数据的子集
DISTINCT 去除重复数据,只能在查询字段前面出现一次
as 查询的字段,或表达式结果,可以取别名,
as可以省略
where 后面不能使用字段别名,order by后面可以使用字段别名
group by 多行分组,求多行函数的时候使用
having 对多行函数计算结果进行过滤 where 和 having的区别
1. where过滤普通条件,不能过滤多行函数
2.having 过滤多行函数结果,能过滤普通函数;
3.where 在分组前过滤;
4.having必须跟在group by 后面。分组之后再过滤

select 子句的执行顺序

  • select
  • from
  • where
  • grop by
  • having
  • order by
  • limit

WHERE子句的操作符

关键字 知识点 备注
= 等值过滤
<> 不等值过滤
>  >=   <  <= 比较大小
In(3,78,6,21) 从一组数中间选值
Like 字符中模糊查郇
% 统配多个字符
_(下划线) 统配单个字符
\ 转义符,_  %
not not  between  andnot  itnot  like
and 并且
or 或者
is null
is not null
Null值过滤
between a and b 范围查询 包含指定的开始值和结束值
REGEXP 正则表达式,和like相似,但是会降低查询性能,
.(小黑点)表示任意一个字符
REGEXP BINARY 表示区分大小写
^和&可以作为其实和结束的约束
select * from user_info where user_id regexp 'oo'
正则表达式和like的区别在于,REGEXP匹配的是子串

3.3 查询字段处理

字符串处理函数

char_length('a中') - 字符数
length('') - 字节数
concat('a','b','cde','fff') -连接字符串
locate('abc', '-abc--abc-') - 返回第一个子串的位置,从1开始,找不到返回0
insert('abcdefghijkl',2, 11, '---') - 用子串取代从2位置开始的11个字符
lower('AdFfLJf') - 变为小写
upper('AdFfLJf') - 变为大写
left('AdFfLJf',3) - 返回最左边的三个字符
right('AdFfLJf',3) - 返回最右边的三个字符
trim(' a bc ') - 去除两端空格
substring('abcdefghijklmn', 3, 6) - 从3位置开始的6个字符
REPLACE('Hello MySql','My','Your') - 子串替换

数字处理函数

Ceil(-3.14)- 向上取整  ,不能制定位数
floor(3.94) - 舍掉小数,向下取整
format(391.536, 2) - 数字格式化为字符串,第二个参数是小数点后位数
round(673.4974, 2) - 第二个参数,正数表示,四舍五入到小数点后两位,负数的话表示向上进位置,也即百位以上进位
TRUNCATE(234,31, 1) - 舍去至小数点后1位
abs() -取绝对值

日期处理函数

NOW()   返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间

加密函数

md5()  单向加密,无法解密

sha() 相比md5()更加安全

Null函数

 IFNULL(数据1,数据2) - 数据1是null返回数据2;不是null返回数据1
coalesce(数据1,数据2,......) - 从左向右第一个不是null的数据

分页查询

limit a,b  a开始行数,b表示查询行数

相对效率比较低

多行函数(多行数据交给函数处理,产生一个计算结果)

  • 多行函数会忽略null值
  • 不能直接与普通字段一起查询
  • 一般和group by合用
   count()   计数,数量,默认null值忽略,但是count(*)的时候null值不忽略
sum() 求和,可以多列上进行计算
avg() 求平均数,只能处理单列,多列要用多个avg()函数
max() 求最大值
min() 求最小值

3.4 子查询

条件子查询

关键字 知识点 备注
= , <> ,>,< 单个值的查询
in , > all(元素),> any(元素) 多个值查询,in表示存在,all表示比最大的大,any表示比最小的大
(col1,col2)in 多列查询

行内视图和select字段子查询

行内视图
select ... from (select ... from...) as tb
select ... from tb where col in (select col1 from tb2 where )
select ... from tb where id = (select id from tb2 where name='zhangsan') 字段子查询
select col,(select col1 from tb1 where tb1.id = tb.id) from tb as tb

3.5 多表联查

  • 自联结
  • 将一张表看成两张表
  • 同一张表的主键和外键进行关联
 select tb1.col,tb2.col2
from tb tb1,tb tb2
where tb1.id = tb2.refe_id
  • 自然联结

    • 选取两个表中全匹配的数据,舍弃不匹配的数据。由于自然连接会丢弃与其他表没匹配的数据,所以查询的数据可能造成数据信息丢失
 select ...
from tb
[inner] join tb1 on tb.id = tb1.id
  • 外联结

    • left [out] join 为左边的表,筛选出所有符合 连接条件的数据
    • right [out] join 为右边的表,筛选出所有符合连接条件的数据

3.6 联合查询

  • 在单个查询中多个表关联查询出相似的数据
  • 对单个表执行相似的操作,按单个表返回数据

    关键字UNION
  • 必须两个以上select语句
  • 每个查询都必须包含相同的列;
  • UNION会自动去除重复的行
  • 使用UNION ALL 不去除重复的行
  • UNION 不允许多个ORDER BY语句,只能在最后使用

数据库基础01-SQL基础语法的更多相关文章

  1. 【知识库】-数据库_MySQL常用SQL语句语法大全示例

    简书作者:seay 文章出处: 关系数据库常用SQL语句语法大全 Learn [已经过测试校验] 一.创建数据库 二.创建表 三.删除表 四.清空表 五.修改表 六.SQL查询语句 七.SQL插入语句 ...

  2. Oracle数据库之PL/SQL基础

    介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...

  3. python3基础01(常见语法基础汇总)

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 换行\n 续行\ s[:i] + s[i:] 等于 s#转义 \e 空 \000 八进制 \oyy 十六进制 ...

  4. SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]

    --====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...

  5. SQL基础--&gt;层次化查询(START BY ... CONNECT BY PRIOR)

    --====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...

  6. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  7. SQL Server 基础 01 数据库、表操作

    对着书慢慢学习,一天一点点! 数据库操作 (create.alter.drop)  --3-3-1 /create database 语句创建数据库 create database testSQL - ...

  8. MariaDB——数据库基础与sql语句

    数据库介绍 什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据 ...

  9. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  10. 数据库学习---SQL基础(一)

     数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) SQL(struct query language)结构化查询语言:一种专门与数据库通信的语言, ...

随机推荐

  1. DDD之4聚合和聚合根

    聚合就是归类的意思,把同类事物统一处理: 聚合根也就是最抽象,最普遍的特性: 背景 领域建模的过程回顾: 那么问题来了? 为什么要在限界上下文和实体之间增加聚合和聚合根的概念,即作用是什么? 如何设计 ...

  2. 4-react 组件之间传值。

    1.传值: 都是使用props和state结合得方式进行组件之间得传值 再react中传值得话是父子组件之间得传值,一般会把父组件中得state值通过props传给子组件,再子组件中使用props进行 ...

  3. javaweb之Servlet,http协议以及请求转发和重定向

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 一直用的框架开发,快连Servlet都忘了,此文旨在帮自己和大家回忆一下Servlet主要知识点.话不多说开始吧 用idea构建Servlet项 ...

  4. Swift Core Data 图片存储与读取

    1.首先推出选择拍照还是相册的alert,代码如下: UIAlertController *alert = [UIAlertController alertControllerWithTitle:ni ...

  5. 开窗函数_ROW_NUMBER() / RANK() / DENSE_RANK() / NTILE() ------4个排名函数训练_1

    排名函数(训练,其实从SQL2005时就已经被引入) /*SQL Server 2012从零开始学_7.8  排序函数*/ --DROP TABLE fruits GO Create table fr ...

  6. 利用Azure Functions和k8s构建Serverless计算平台

    题记:昨晚在一个技术社区直播分享了"利用Azure Functions和k8s构建Serverless计算平台"这一话题.整个分享分为4个部分:Serverless概念的介绍.Az ...

  7. Python数据处理常用工具(pandas)

    目录 数据清洗的常用工具--Pandas 数据清洗的常用工具 Pandas常用数据结构series和方法 Pandas常用数据结构dataframe和方法 常用方法 数据清洗的常用工具--Pandas ...

  8. 十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验

    Newbe.Claptrap 项目是笔者正在构建以反应式.Actor模式和事件溯源为理论基础的一套服务端开发框架.本篇我们将来了解一下框架在水平扩展方面的能力. 前情提要 时隔许久,今日我们再次见面. ...

  9. NodeJs通过HTTP模块发起GET|POST请求

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] Node.js ...

  10. 30_栈的定义.swf

    上面的局部变量 i int*p中的p指针变量,是在栈中分配的,malloc申请的内存是在堆中分配的,动态申请的都在堆中分配的. 栈是一种数据存储的结果,先进后出的数据结构.