mysql基础语法

mysql基础语法

Date
Oct 20, 2014
Tags
Mysql
Database
 

基础概念

数据库(database):保存有组织的数据容器

数据表(table):特定类型数据的结构化清单

模式(schema): 关于数据库和表的布局及特性的信息。

列(column): 表中的一个字段

行(row): 表中的一个记录

主键(primary key): 可以唯一标识该行的列(或一组列)

基础语法

语法结构

sql语句是不区分大小写。但是数据库表名,列名和值是否区分是由数据库配置决定

子句:是语句和查询的组成部分

表达式: 可以产生标量值,或由列和行的数据库表

谓词:需要评估SQL的三值逻辑(true/false/unknown)

查询: 基于特定条件检索数据

语句: 可以持久化影响纲要和数据,也可以控制数据库事务和程序流程等

语法要点

  • 多条SQL是以; 来分割的
  • sql语句的空格在执行时会被忽略,所以sql可以分成多行来书写
  • sql三种注释: ` ## 注释 ` , ` - 注释 `, `/* 注释 */`

SQL分类

数据定义语句(DDL): 负责数据结构定义与数据库对象定义的语言, 比如Create,`ALTER`, `DROP`

数据操作语句(DML): 用于数据库操作,对数据库中对象和数据进行访问,比如INSERTUPDATEDELETESELECT

数据控制语句(DCL): 对数据访问权进行控制的指令, 比如GRANTREVOKE

事务控制语句(TCL):用于管理数据库中的事务,比如COMMITROLLBACK

增删改查

又称为CRUD, 是数据库最基本的操作

插入(INSERT):

  • 插入完整行
  • 插入部分行
  • 插入查询出来的数据
 
insert into user
values( 10, 'root', 'root', 'xxxxx@gmail.cc' )


insert into user( `username`, `password`,`email` )
values('admin','admin','admin@gmail.cc')

insert into user(`username`)
select name from account

更新(UPDATE)

update user
set username='root',passowrd='robot'
where username='root'

删除(DELETE)

Delete 用于删除表中的记录, Truncate table 用于清空表
delete from user
where username='root'

查询(SELECT)

DISTINCT 用于唯一不同值, LIMIT 限制返回的行数
  • 查询单列
  • 查询多列
  • 查询所有列
  • 查询不同值
  • 限制查询结果
 
select username from user

select username, email from user

select * from user

select distinct(email) from user

-- 返回前5行
select * from user limit 5    
-- 从第0个记录返回5个
select * from user limit 0, 5

子查询

子查询是嵌套在较大查询中的SQL查询,也称为内部查询
  • 可以嵌套在SELECTinsertupdatedelete语句内
  • 子查询通常会在另外一个select语句的where 子句
  • 可以使用比较运算符,如<>=
  • 子查询必须被圆括号()包起来

where条件过滤

后面跟随的是true/false的条件,
可以使用 AND,OR, NOT 等连接多个判断条件

操作符

  • = 等于
  • <> 不等于
  • > 大于
  • < 小于
  • >= 大于等于
  • <= 小于等于
  • Between 在某个范围内
  • Like 模式搜索
  • in 指定某列的多个可能值

select语句中

select * from user
where `username` = 'admin'

update语句中

update user
set `username` = 'root'
where `username` = 'admin'

delete语句中

delete from user
where `username` = 'admin'

in和between

select *
from user
where `username` in ( 'admin', 'root' )

select *
from user
where userId between 1 and 3

Like

  • 只有列是文本值才可以使用Like
  • Like 支持两种通配符: %_
  • % 表示任意字符出现任意次数
  • _ 表示任意字符出现一次
select username
from user
where `username` LIKE '%admin%'

select username
from user
where `username` LIKE '_admin'

JOIN查询

用于连接多个表, 并条件语句使用ON表示共同的列

内连接(INNER JOIN)

返回两个表共有的部分
select username
from `user` 
inner join `role` on `role`.`id` = `user`.`roleId`

左连接(LEFT JOIN)

返回左表
select username
from `user` 
left join `role` on `role`.`id` = `user`.`roleId`

右连接(RIGHT JOIN)

返回右表
select username
from `user` 
right join `role` on `role`.`id` = `user`.`roleId`

组合(UNION)

两个表查询的列数和列顺序必须相同
将多个查询结果组合起来生成一个结果集
select username
from `users`
where `userId` IN ( 1,2,3 )
UNION
select username
from `users`
where `username` = 'admin'

内置函数

以下罗列的是mysql的内置函数

文本处理

  • LEFT() 切割出左边的字符
  • RIGHT() 切割出右边的字符
  • LOWER() 转换小写
  • UPPER() 转换大写
  • LTRIM() 去掉左边的空格
  • LENGTH() 长度

时间处理

日期: YYYY-MM-DD,  时间:HH:MM:SS
  • CurDate() 返回当前日期
  • CurTime() 返回当前时间
  • Date() 返回日期部分
  • DateDiff() 计算两个日期之差
  • Date_Format() 返回格式化的日期
  • Now() 返回当前日期和时间
select NOW();
-- 2021-4-10 16:51:41

数值处理

  • AVG() 返回列的平均值
  • COUNT() 返回列的行数
  • MAX() 返回列的最大值
  • MIN() 返回列的最小值
  • SUM() 返回列的和

排序和分组

Order By

对结果集进行排序, ASC: 升序;DESC:降序
select * from `user` order by `userId` DESC, `username` ASC;

Group By

分组,每组返回一个记录
-- 按照username分组返回
select username
from `users`
GROUP BY `username`

Having

Group By
-- 返回用户同名用户数大于1的,切email非空的结果
select username, COUNT(*) as user_num
from `user`
where `email` IS NOT NULL
group by `username`
HAVING COUNT(*) > 1
 

Loading Comments...