一、运算符号
二、查询关键字
1.各关键字优先级
where > group by > having > order by > limit
2.Select
语法:select 字段名 from 表名 where 条件语句;
说明: - 多个字段名用,隔开,也可用*表示所有字段 - 字段名可用distinct修饰,表示查询结果中该字段相同的数据只会保留第一行数据
3.Where
select、update、delete等其他DDL语句的子句,用来表示执行操作的条件
语法:where 条件字段 运算符 条件值
说明: - 运算符后面的条件值,如果是文本类型,需要使用引号包含,非文本类型的值不要用引号包含。 - where子句中可以跟多个条件,每2个条件之间用逻辑运算符 and 或者 or 分隔开。
4.like
作为where子句中的比较运算符来使用,通常与通配符配合进行模糊匹配。
语法:
where 条件字段 like '[abcd]_%';
5.Top或者Limit或者Rownum
从查询结果中筛选出排序靠前的指定行数数据。
并非所有的数据库管理系统都支持top语句,不同的数据库管理系统中,top语句的语法也不相同。
SQL Server:
语法:select top 5 LastName from Persons
说明:从Persons表中,搜索排序在前5的数据
语法:select top 50 percent from Persons
说明:从Persons表中,搜索排序在前50%的数据
Mysql:
语法:select LastName from Persons limit 5
说明:从Persons表中,搜索排序在前5的数据
Oracle:
语法:select LastName from Persons where rownum<=5
说明:从Persons表中,搜索排序在前5的数据
6.Order By
对搜查的结果进行排序显示,可以指定多列,对搜查结果进行升序或者降序显示
select * from Persons order by FirstName asc,LastName desc
说明:多个排序字段之间用,分隔开
Asc表示升序,Desc表示降序
每个排序字段要单独指定圣墟还是降序
7.Case When
将查询结果某个字段的值,根据指定的条件转换为其他值。
语法1:
case
when 条件1 then 值1
when 条件2 then 值2
else 值3
end as 字段名
语法2:
case 字段名
when 现有值1 then 修改值1
when 现有值2 then 修改值2
else 修改值3
end as 字段名
三、查询技巧
1.计算日期差
Mysql中没有直接计算两个日期差值的函数,可以用以下方式计算:
To_Days(date1) - To_Days(date2)
2.时间戳与日期比较
最好将日期转化为时间戳进行比较。因为将时间戳转换为日期的函数from_unixtime不支持负数,可能导致比较结果出错。
3.设置自增数据
Mysql的命令支持自增类型的语法:
set @num:=1;
update devices set imei=(@num:=(@num+1));
4.将查询结果插入其他表
insert into table1(name,type) select name,type from table2
5.SQL嵌套使用
语法:select * from table1 where id in (select id from table2);
说明:若子查询结果只包含一个字段,可作为父查询中符号in的条件
语法:select * from (select * from table1 ) as table2
说明:若子查询结果只包含一个字段,建议给子查询起一个别名,作为父查询中的一张表来使用
四、其他数据操作语句
1.Update
修改指定数据表中,符合条件行的某些字段值
语法:update 表名 set 列名=目标值 where 条件语句
说明:
1.可设定多个字段值,键值对用,隔开
2.where子句表示只更新符合条件的数据
2.Insert into
向指定的数据表中插入数据。
语法:insert into 表名(字段名1,字段名2) values(值1,值2);
说明:
1. 表名后面的字段数量,比如与values中的值数量保持一致。
2. 表名后面的字段,可以只是数据表中的一部分字段。语句执行后,未指定的字段会设置为默认值。
3. 表名后面的字段名,不要用引号包含。如果values后面的值是字符型,需要用引号包含。
4. 语句执行后,values后面的值会按照编写的顺序,依次插入到表名后面字段中。
语法:insert into 表名 values(值1,值2)
说明:
1. 如果表名后面没有指定字段列表,表示数据表中的每个字段都需要插入值。
2. 此时values后面值得数量,必须与数据表中的所有字段数保持一致
3.Delete
删除指定数据表中,符合条件的数据行
语法:delete from Persons where LastName='Gates'
说明:带有where子句表示只删除符合where条件的数据
语法1:delete from Persons
语法2:delete * from Persons
说明:删除所有数据但是保留表的结构、属性、索引
五、数据库控制语句
1.连接服务器
连接到本地:
语法:mysql -u username -ppassword
说明:-u和username之间可以有空格,也可以不写空格
如果用户没有设置密码,不要加上-p+password这部分内容
-p和password之间不要输入空格,否则必须再输入一次密码
连接到其他服务器:
语法:mysql -h 192.168.2.1 -u username -ppassword
说明:-h和ip地址之间可以有空格,也可以不写空格
参照“连接到本地”的3条说明
断开连接:
语法:exit
2.设置密码
添加密码:
语法:mysqladmin -u root password "password"
取消密码:进入mysql数据库
将user数据表中,password的字段修改为空
重启mysql服务,或者使用“重新载入数据”命令
修改密码:
语法:set password for 'root'@'localhost' = password('123456'); 说明:登录Mysql之后使用
语法:mysqladmin -u root -p password "NewPassword"
语法:mysqladmin -u root -pOldPassword password "NewPassword"
语法:update user set Password=password("123456") where user="root"; 说明: 1. 登录Mysql之后使用 2. 修改后重启mysql服务,或者使用“重新载入数据”命令
3.账号管理
创建用户:
语法:create user 'username'@'host' identified by 'password';
说明:host表示允许用户连接数据库的主机,localhost表示本地,%表示任意主机
password可以为空,表示该用户登录不需要密码
授权:
语法:grant privileges on DatabaseName.TableName to 'username'%'host' with grant option;
说明:privileges表示赋予用户的权限,权限包括select、insert、update、delete,在授权时,可以指定多个权限,两个权限之间用","分割。也可以用all表示所有权限
Database表示数据库名,可以用*表示所有数据库
TableName表示表名,可以用*表示所有表
with grant option:如果授权命令中没有加入这条选项,那么被授权的用户,不可以对其他用户进行授权
identified by 'password':在授权命令中,也可以加入这条选项,来修改命令或者去掉命令
显示授权:
语法 :show grants for 'username'@'host'
取消授权:
语法 :revoke privileges on DatabaseName.TableName from 'username'@'host' 说明:取消授权时,指定的DatabseName.TableName范围,必须与进行授权时指定的范围一直,取消授权才能生效
六、数据库、数据表操作语句
创建数据库:
语法:create database DatabaseName default character set 编码 collate 编码
显示数据库列表:
语法:show databases;
判断表是否存在:
语法:if exists tablename
创建表:
语法:create tablename if not exists tablename 说明:判断表是否存在,如果不存在的话再创建表
用查询结果创建临时表:
语法:create temporary table TableName ( select ...);
删除表:
语法:drop table if exists TableName; 说明:如果表tablename存在就删除这张表
重新载入数据:
语法:flush privileges
七、函数库
1.数学函数取模:mod(a,b)
在(0,1)之间随机:rand()
四舍五入取整:round(a,b)
2.字符串函数字符串拼接:concat(str1,str2...)
字符串替换:replace(字段名,原字符,替换后字符)
3.数据类型转换字符串to数字:select name+0
4.日期函数
函数:
时间格式: