开发教程

mysql 基本语法

2021-08-12 00:45:15 63资源网 148

--删除数据库
drop database [数据库名] go

--创建数据库
create database [数据库名] go

--打开数据库
use 数据库名 go

--创建表
create table [表名]

(
[列名] [数据类型] identity(增长种子,增长量) primary key(是否主键)(是否为空),
)
go

--删除表
drop table [表名] go

--查找指定表中所有记录
select * from [表名]

--添加一条记录
insert into [表名] [列名] values [值]

--添加多行记录1
insert into[表名] [列名]
select [列名] from [数据来源表]

--添加多行记录2
insert into[表名] [列名]
select [值],[值] union
select [值],[值]

--用一个表中满足条件的记录生成另外一个新的表
select * into [表1] from [表2]

--删除记录1
delete from [表名] where [条件]

--删除记录2
truncate table [表名]

--给表中增加一个列
alter table [表名] add [新增列名] [数据类型]

--更新
update [表名] set [列名] = [更新值] where [条件]

--查询所有记录的所有列的值
select * from [表名]

--where子句(条件)
select * from [表名] where [条件]

--as对列重命名
select [原列名] as [新列名] from [表名]   --方法一
select [原列名] [新列名] from [表名]      --方法二

--列的合并
select [列名1] + ',' + [列名2] as [新列名] from [表名]  --方法1
select [新列名] = [列名1] + ',' + [列名2] from [表名]   --方法2

--查询有NULL值的记录
select * from [表名] where [列名] is null

--查询空字符串
select * from [表名] where [列名] = ''

--常量列
select [列名,新列名] =[赋值] from [表名]

--显示表中前n条记录
select top  [n] * from [表名]

--显示表中百分之n的记录
select top [n] percent * from [表名]

--排序
--升序
select * from [表名] order by [列名]

--降序
select * from [表名] order by [列名] desc

--同时按照两个列排升序
select * from [表名] order by [列名1,列名2]

--sql函数
--返回长度的函数len
select len('字符串')

--返回字符串前n个字符的函数
select left('字符串',n)

--返回字符串后n个字符的函数
select right('字符串',n)

--替换字符串中的某个字符的函数
select replace('字符串','字符串中被替换的字符','替换后的字符')

--替换字符串中的指定位置n指定长度x的字符的函数
select stuff('字符串',n,x,'替换后的字符')

--取当前系统信息的函数
select getdate()

--将指定的数值添加到指定的日期部分后的日期的函数
select dateadd(指定的日期,添加的日期,getdate())

--转换数据类型的函数
select convert(要转换的数据类型,'被转换的数据类型的值')

--多表联查
select [表名一.表名一中的列名],[表二.表二中的列名]
from [表名一],[表名二]
where [条件] 如(表名一.列名(与表二的列名相符) = 表名二.列名(与表一的列名相符))]

--内连接
select [表名一.表名一中的列名],[表二.表二中的列名]
from [表1],
inner join [表2]
on (表名一.列名(与表二的列名相符) = 表名二.列名(与表一的列名相符))

--三表联查
select [表1.表1中的列],[表2.表2中的列],[表3.表3中的列]
from [表1]
inner join [表1中的列]
on (表名1.列名(与表2的列名相符) = 表名2.列名(与表1的列名相符))
inner join 表2中的列
on (表名2.列名(与表3的列名相符) = 表名3.列名(与表2的列名相符))



--查询值1到值2之间的值(所有的列)
select * from users
where age between 值1 and 值2

--查询某列指定的几个值(所有的列)
select * from users
where  in 列名 ('值1','值2','值3')

--查询某列指定的几个值之外的所有值(所有的列)
select * from users
where nickname not in ('值1','值2','值3')

--查询某列中含有n的字符的所有值
select * from users
where 列名 like '%n%'

--查询某列出字段值为null的记录
select * from users
where 列名 is not null

--查询某列出字段值为空字符串的记录
select * from users
where 列名 = ''

--统计某表中有多少男性用户
select count(*) as 男性用户数量 from 表名 where sex<>'女'

--查找最大值
select max(列名) as 最大值 from 表名

--查找最小值
select min(列名) as 最小值 from 表名

--计算平均值
select avg(列名) as 平均值 from 表名

--计算总和
select sum(列名) as 总和 from 表名

--多表联查
--用where条件做
select 表名1.列名,表名2.列名
from 表名1,表名2
where 条件(两表ID相等)

--用内连接做
select 表名1.列名,表名2.列名
from 表名1 inner join 表名2
on 条件(两表ID相等)

--左外连接 ---左边的可以为空 右边的不可以
select  表名1.列名,表名2.列名
from 表名1 left join 表名2
on 条件(两表ID相等)

--右外连接---右边的可以为空 左边的不可以
select 表名1.列名,表名2.列名
from 表名1 right join 表名2
on 条件(两表ID相等)

--交叉连接
select 表名1.列名,表名2.列名
from 表名1 cross join 表名2
where  条件(两表ID相等)

--三表联查
select 表1.值1,表2.值2,表3.值3
from 表1
inner join 表2
on 条件(两表ID相等)
inner join 表3
on 条件(两表ID相等)

--group by
--统计编号为10001的学员所有考试的平均分
select sid,avg(mark)as 平均分
from score
group by sid

--统计每一门课程的平均分
select cid,avg(mark)as 平均分
from score
group by cid

--显示学生姓名和考试平均分
select u.nickname,avg(s.mark)as 平均分
from users as u
inner join score as s
on u.id=s.sid
group by u.nickname

--显示科目名称和科目平均分
select c.cname,avg(s.mark)as 平均分
from course as c
inner join score as s
on c.id=s.cid
group by c.cname

--显示平均分大于60分的学生姓名,科目名称,平均分
select c.cname,avg(s.mark)as 平均分
from course as c
inner join score as s
on c.id=s.cid
group by c.cname
having avg(s.mark)>60

and:只有两个条件都为true,整个表达式的结果才为true
or:只要有一个条件为true,整个表达式的结果就为true
not:条件为true,表达式结果为false;条件为false,表达式结果为true


6yNO6um%2bSsKu9mSSjb%2fmNAb3a7ZuCb9q
6yNO6um%2bSsKu9mSSjb%2fmNCDk1kya5Peq
6yNO6um%2bSsJBWctDYZ0ISvWMOBP3mZbq
6yNO6um%2bSsJBWctDYZ0ISnrfD7FgX2pX
6yNO6um%2bSsJBWctDYZ0ISuD3GjE4JyJB
6yNO6um%2bSsJBWctDYZ0ISvNHp4lklYGn


查询 pre_exx_linkseo表 title字段 重复数据有几条
SELECT title,COUNT(*) FROM pre_exx_linkseo GROUP BY title HAVING COUNT(*) > 1

查询 pre_exx_linkseo表 title字段 重复数据详细信息
select * from pre_exx_linkseo where title in (select title from pre_exx_linkseo group by title having count(title)>1)