常用的sql语句(持续更新)

创建数据库

1、连接数据库

  • #mysql -uroot -p(root用户默认密码空)

2、创建数据库myTest

  • #create database myTest;

3、显示拥有权限的数据库

  • #show databases;

4、切换数据库

  • #use databaseName

表(增删改查)

1、增

create table students(
id int auto_increment primary key,
name varchar(10) not null,
sex varchar(3) default '女',
address varchar(50),
phone int not null unique,
age,
);

2、删

  • #drop table tablename;
  • #truncate tablename;#快速删除表

3、改

  • #alter table oldtable rename newtable; #改表名
  • #alter table tablename modify name varchar(20);#改表结构
  • #alter table tablename change name newname varchar(20);#改表结构
  • #alter table tablename add age float after name;#新增字段的位置
  • #alter table tablename add primary key(id)
  • #alter table tablename drop primary key(id)

  • #show create table tablename ;#查看新建表语句
  • #desc table;#查看表结构
  • #show tables ;#查看所有表

数据(增删改查)

1、增

  • #insert into student (name,money,sex,phone) values (‘hk’,10000,‘男’,188);

2、删

  • #turncate tablename; #删除整表数据,自增长id从头再来,快速,从磁盘直接删除,不可恢复
  • #delete from student;
    #删除整个表的数据,自增长继续

3、改

  • #update student set money=100;#不指定条件,修改所有
  • #update student set money=110 where name=‘hk’;#只改hk

4、查

select * from students limit 1,5; #从第几条开始,下面的x条,不包含开始的那一条
SELECT * from students limit 5;查询5条
SELECT id,stu_name,sex,money,phone from students;#指定查询的字段
SELECT * from students;#查询所有的数据
SELECT * from students where sex='男';#指定条件
SELECT * from students where sex='男' and money>100; #多个条件,必须同时满足
SELECT * from students where sex='男' or sex='未知' ; #多个条件,有一个满足即可
SELECT * from students where sex !='男'; #<>也是不等于
SELECT * FROM students where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like
SELECT * from students a where a.stu_name like '姚_';#_通配符表示任意一个单字符,姚字后面只能跟一个字
SELECT a.stu_name '学生名称',a.phone '学生电话' from students as a where a.stu_name='姚远';#给表起别名,as可以省略
SELECT * from students a where a.stu_name in ('牛牛','林倩','林远');# in
SELECT * from students a where a.money BETWEEN 1000 and 10000;#在什么什么之间的数据
SELECT * from students ORDER BY money desc;
#order by xxx desc,根据哪个字段继续排序,默认是升序,
降序是desc,升序asc
SELECT * from students a where a.addr = '' or a.addr is null; #查询字段为空的数据
SELECT DISTINCT a.money from students a ;#去重
SELECT COUNT(*) '学生人数' from students where sex='女'; #统计行数
SELECT MAX(a.money) 钱最多 from students a; #最大值
SELECT min(money) 钱最少 from students;#最小值
SELECT AVG(a.money) 平均多少钱 from students a; #平均数
SELECT sum(a.money) 总共多少钱 from students a;#总和
SELECT sex 性别,count(*) 人数 from students GROUP BY sex; #分组

数据库权限

1、grant授权

  • #grant all on *. to ‘andashu’@‘localhost’ IDENTIFIED BY ‘123456’ with grant option;
  • #grant all on *. to ‘andashu’@’%’ IDENTIFIED BY ‘123456’ with grant option
  • #flush privileges;#刷新权限

2、取消授权

  • #Revoke select on . from dba@localhost;
  • #Revoke all on . from andashu@localhost;

修改user表数据

备份数据库:

  • #mysqldump -uroot -p123456 db > db.sql
  • #mysqldump -uroot -p123456 -A > all.sql

    恢复数据:

  • #mysql -uroot -p123456 db < db.sql

删除数据库用户

1、drop不仅删除user表的内容,还会删除其他权限表的内容

  • #drop user username;
  • #drop user username@localhost;

2、delete只会删除user表的内容,删除用户后需要用flush privileges刷新权限,不然下次create会报错

  • #delete from user where user=‘XXX’ and host=‘localhost’;其中XXX为用户名,localhost为主机名

复制一张表到新表

方法一:

1.复制表结构及数据到新表

复制代码代码如下:

  • #CREATE TABLE 新表
    SELECT * FROM 旧表
2.只复制表结构到新表

复制代码代码如下:

  • #CREATE TABLE 新表
    SELECT * FROM 旧表 WHERE 1=2

即:让WHERE条件不成立.

方法二:(低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)

复制代码代码如下:

CREATE TABLE 新表
LIKE 旧表

3.复制旧表的数据到新表(假设两个表结构一样)

复制代码代码如下:

  • #INSERT INTO 新表
    SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)

复制代码代码如下:

  • #INSERT INTO 新表(字段1,字段2,…….)
    SELECT 字段1,字段2,…… FROM 旧表

多表连接查询

表一:t_book
常用的sql语句(持续更新)_第1张图片
表二:t_bookType
常用的sql语句(持续更新)_第2张图片
表三:t_priceLevel
在这里插入图片描述
select * from t_book,t_bookType;
常用的sql语句(持续更新)_第3张图片
1.内连接查询(两张或以上的表连接起来查询需要的数据)
根据表一的bookTypeId查询出所有bookTypeName
select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;
在这里插入图片描述
查询某几个字段:
select bookNme,author from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;

在这里插入图片描述

2.外连接查询(两张或以上的表连接起来查询某张表的信息)

3.左连接查询
select * from t_book left join t_bookType on t_book.bookTypeId=t_bookType.id;
如下图:表一(左边表)t_book的数据全部查出 表二没有的字段用null代替

在这里插入图片描述

4.右连接查询
select * from t_book right join t_bookType on t_book.bookTypeId=t_bookType.id;
查出表二(右边表)的所有信息,表一没有的用null代替

在这里插入图片描述

5.多条件连接查询
select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id and t_book.price>70;
在这里插入图片描述

子查询

1.带in关键字的子查询(一个查询语句的条件可能落在另一个select语句的查询结果中)

select * from t_book where bookType in(select id from t_bookType);
select * from t_book where bookType not in(select id from t_bookType);

2.带比较运算符的子查询(子查询可以使用比较运算符)

select * from t_book where price>=(select price from t_priceLevel where priceLevel=1);

3.带exists关键字的子查询(加入子查询查询到记录,则进行外层查询,否则,不执行外层查询)

select * from t_book where exists(select * from t_booktype);
select * from t_book where not exists(select * from t_booktype);

4.带any关键字的子查询(any关键字表示满足其中任一条件)

select * from t_book where price>= any(select price from t_priceLevel);

5.带all关键字的子查询(all关键字表示满足所有条件)

select * from t_book where price>= all(select price from t_priceLevel);

合并查询

1.union

使用union关键字是,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录;
select id from t_book union select id from t_bookType;

2.union all

使用union all,不会去除掉重复的记录;
select id from t_book union all select id from t_bookType;

表复制语句

1.INSERT INTO SELECT语句
  • mysql> Insert into Table2(field1,field2,…) select value1,value2,… from Table1
  • 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量
2.SELECT INTO FROM语句
  • mysql> SELECT vale1, value2 into Table2 from Table1
  • 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
3.复制表结构以及数据
  • mysql> CREATE TABLE 新表 SELECT * FROM 旧表
4.只复制表结构
  • mysql> CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
    即:让WHERE条件不成立.
  • mysql> CREATE TABLE 新表 LIKE 旧表 (低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)
5.复制旧表数据到新表(两表结构一样)
  • mysql> INSERT INTO 新表 SELECT * FROM 旧表
6.复制旧表数据到新表(两表结构不一样)
  • mysql> INSERT INTO 新表(字段1,字段2,…….)SELECT 字段1,字段2,…… FROM 旧表

你可能感兴趣的:(linux,数据库)