如今,数据库管理系统的图形化操作使用起来非常的便捷。但是,作为一名计算机开发人员,掌握一些sql
语句,也是很有必要的。因此,小王整理了一些有关Mysql
数据库的sql
语句。
数据库相关操作
create database 数据库名称 default charset 'UTF8';
作用:创建数据库,指定字符编码
-- 创建指定命令、指定编码的数据库
create database xiaowangdb01 default charset 'UTF8';
drop database 数据库名称;
作用:删除指定数据库
-- 删除数据库
drop database xiaowangdb01;
use 数据库名称;
作用:指定数据库
-- 指定数据库
use xiaowangdb01;
create table 数据表名称(...);
作用:创建数据表
-- 创建专题表
create table subjects(
-- int类型
-- primary key主键:可以表示一个数据的属性
-- auto_increment:自动增长
id int primary key auto_increment comment '专题编号';
-- not null:表示这个属性增加数据时不能为空
title varchar(50) not null comment '专题标题';
intro text comment '专题信息'
)
drop table 数据表名称;
作用:按照指定名称,直接删除数据表
-- 删除专题数据表
drop table subjects;
insert into users(....) values(...);
作用:增加数据
-- 增加用户数据
insert into users(username,userpass,nickname) values("tom","123","汤姆");
delete from 数据库名称 where key = value;
作用:删除符合条件的数据
-- 删除用户表中编号为1的数据
delete from users where id=1;
update 数据表 set key1 = value1,key2 = value2 where key = value;
作用:修改语句
注意:慎重使用,必须非常明确where后面的条件是否准确!
-- 修改用户表中`tom`的相关数据
update users set age = 18,email = "tom@163.com" where username = "tom";
select * from 表名称;
作用:查询表中的所有数据
-- 查询emp表中的所有数据
select * from emp;
select 列1,列2,列3... from 数据表名称;
作用:查询表中的指定属性/列数据
-- 查询emp中的员工名称、薪水、奖金
select ename, salary, comm from emp;
select 列 as 别名 from 表名称;
作用:查询数据时,可以让查询结果按照指定名称显示(as可以省略)
-- 查询emp表中的姓名,工资并将其作为列名称展示
select ename as 姓名, salary as 工资 from emp;
select * from 数据表名称 order by 列(需要排序的列)desc(倒序) | asc(顺序);
作用:按照想要的顺序进行排列
-- 将emp表按照薪水倒序排列
select * from emp order by salary desc;
select * from 表名称 limit 起始id, 查询条数;
作用:数据量较大的情况下,可以每次查询一部分数据,按照分页的方式查看
-- 起始id = (当前页码 - 1)*查询条数
-- 第一页,每页显示5条数据
select * from emp limit 0, 5;
select * from 数据表名称 where 列 like '%值%';
作用:按照数据的一部分进行模糊搜索
-- %:模糊匹配任意一个或者多个字符
-- _:模糊匹配任意一个字符
select * from emp where ename like '%王%'
select * from 数据表名称 where 条件;
作用:查询数据的同时,附加一定的条件进行数据过滤
-- 单条件查询
-- 工资大于10000的人
select * from emp where salary > 10000
-- 多条件查询
-- 工资大于10000同时奖金超过10000的人->and
select * from emp where salary > 10000 and comm > 10000;
-- 工资大于等于20000或者奖金大于等于18000的人-> or
select * from emp where salary >= 20000 or comm >= 18000
select * from 表1, 表2 where 关联条件 and 其他条件;
作用:查询两张表的数据,得到一个完整信息
-- 查询小王属于哪个部门
-- select depid from emp where ename = "林冲";
-- select * from dept where id = 4;
-- 完整语法
select emp.id, emp.ename, dept.dname, dept.dloc from emp, dept where emp.deptid = dept.id and emp.ename = "林冲";
-- 别名改造
select e.id, e.ename, d.dname, d,dloc from emp e, dept d where e.deptid = d.id and e.ename = "林冲";
select * from A left join B on 条件A = 条件B;
select * from A right join B on 条件A = 条件B;
作用:通过左连接或者右链接查询两张表的完整数据
注意:Left Join影响到的是右边的表,Right Join影响到的是左边的表。
-- 左(外)连接查询:以左表为主
select * from dept d left join emp e on d.id = e.depid
-- 右(外)连接查询:以右表为主
select * from emp e right join dept d on d.id = e.deptid
select * from 表1, 表2;
注意:这是笛卡尔乘积现象,是多表关联时出现的问题,如果关联条件不变,查询的结果数据就会出现a表数据总数乘以b表数据总数的结果!
-- 笛卡尔乘积
select * from emp,dept;
关于聚合查询
作用:主要用于统计数据
-- 员工总数
select count(1) as cnt from emp;
-- 最高工资
select max(salary) from emp;
-- 平均工资
select avg(salary) from emp;