数据库的基本命令



1.启动服务器

  net start mysql

2.停止服务器:

  net stop mysql

3.连接服务器:

  mysql  -uroot  -p123  

4.断开服务器:

  exit   quit   q  

5.创建数据库

   create database 数据库名;

5.1 数据库的编码(字符集)设置

  create database 数据库名 character  set =utf-8

6.使用数据库

  use 数据库名

7.查看所有的数据库

  show databases;

8.删除数据库

  drop database 数据库名;

9.创建表

  Create table 表名(字段1  字段类型, 字段2  字段类型…)

10.查看表结构

  Desc 表名;
  或者:show  columns  from 数据表名 [FROM 数据库名]; 

11.在表中插入数据

   insert into 表名(字段1,字段2,字段3) values (值1,值2 ,值3);

11.在表中增加字段(一个或多个)

(增加一个字段)格式:alter table 表名 add 新字段名 新字段类型;

(增加多个字段)格式:alter table 表名 add 新字段名1 新字段类型,add 新字段名2 新字 段类型;

12.修改字段类型

  (修改一个字段)格式:alter table 表名 modify 字段名 字段类型;
  (修改多个字段)格式:alter table 表名 modify 字段名1 字段类型,modify 字

13.修改字段名

  (修改一个字段)格式:alter table 表名 change 原字段名  新字段名  字段类型;
  (修改多个字段)格式:alter table 表名 change 原字段名1 新字段名1 字段类型;

14.查询所有字段

1、查询所有字段是指查询表中所有字段的数据。
2、在Mysql中使用"*"代表所有的字段。
3、语法格式:select *  from 表名;

15.修改表记录

  update 表名 set 字段=值   where 条件;                    ------修改一个字段值
  update 表名 set 字段1=值1,字段2=值2....  where 条件;    ------修改多个字段值

16.删除记录(2种方法)

  方法一:     格式:delete from 表名 where 条件;
  方法二:     格式:truncate  表名where  条件;
  SELECT * FROM用来查看表格的具体内容

17.修改表名(rename--重命名)

  有2种方法:
方法一:	 
       格式:alter table 原表名 rename to 新表名;
       或者:alter table 原表名 rename as 新表名;
方法二:
       格式:rename table 原表名 to 新表名;

18.查询指定字段

1、查询指定字段是指查询指定的部分字段。
2、语法格式:
   select 字段名 from 表名;
3、如果查询多个字段,使用“,”对字段进行分隔
   语法格式:
   select 字段名1,字段名2,字段名3 from 表名;

19.去重查询(重复记录只查询一次)

1、使用关键字distinct可以去除查询结果中的重复记录
2、语法格式:
   select distinct 字段名 from 表名;

21.数据表的删除命令(drop)

   drop table 表名;

22.列运算(掌握运算符)

  1、列运算:列和列之间进行运算。
2、了解运算符:
   1)算术运算符:+   -   *   /(div)   %(mod) 
   2)比较运算符:>  >=   <   <=   =  !=  <> 
   3)逻辑运算符:and(&&)  or(||)  not(!)
3、列运算实践:
   1)数值类型的列可以做算术运算(+ - * / %)
      例如:select 列*1.5   from 表名;
            select 列1+列2  from 表名;
            select 列1*列2  from 表名; 
   2)字符串类型的列可以做连接运算  concat(列1,列2)或者concat('字符常量',列))   
      例如:
          select concat(列1,列2) from 表名;
          select concat('$',列) from 表名; 
   3)数值型
      转换NULL值 (把值是NULL的列转换成数值0计算)
      ifnull(age,0)-----把age列中存在的NULL值当成0来计算。
      字符型
      ifnull(sname,'无姓名')-----把sname列中为NULL的转换为无姓名
   4)给列起别名
      例如:select 列1+列2 as 名字 from 表名;
      注意:as 可以省略

23.算数运算符

  + 加号求和的
  —减号求差
  *乘号求积
  /除号求差
  %模求余数
  列如10%3=1
  10除3的差是3 余数为1所以答案唯1,
  奇数%2=1
  偶数%2=0
  例如查询id能被2整除的是?
  Select * from 表名 where id%2=0;
  查询id不能被二整除的是?
  Select * from 表名 where id%!=0;
  查询id能被2整除也能被3整除的信息?
  Select * from 表名 where id%2=0 and id%3=0;

24.掌握集合查询(in)

  1、关键字in可以判断某个字段的值是否在指定的集合中。
   1)如果字段的值在集合中,则满足查询条件,该记录可以被查询出来。
   2)如果字段的值不在集合中,则不满足条件,该记录不能被查询出来。 
  2、案例实践
   1)查询学号是1001,1002,1003的记录
      select * from 表名 where id in(1001,1002,1003);
   2)查询学号不是1001,1002,1003的记录
      select * from 表名 where id not in(1001,1002,1003);  

25.掌握范围查询(between...and)

  1、关键字between...and可以判断某个字段的值是否在指定的范围中。
   1)如果字段的值在指定的范围中,则满足查询条件,该记录可以被查询出来。
   2)如果字段的值不在指定的范围中,则不满足条件,该记录不能被查询出来。
  2、案例实践
   查询年龄在20到40之间的学生记录
        select * from 表名 where age between 20 and 40;
   或者:select * from 表名 where age>=20  and  age<=40;

26.掌握空值及多重条件查询(is null,and,or)

  1、空值查询(is null)
      查询年龄为null的记录  
      select * from 表名 where age is null;
  2、查询姓名不为null的学生记录
        select * from 表名 where name is not null;
   或者:select * from 表名 where not name is null;
  3、带关键字and的多条件查询
     1、查询年龄大于25岁的男讲师
        select * from 表名 where age>25 and sex='男';
     2、查询出性别为男、年龄在30岁以下的精英学院的教师
        select * from 表名 where sex='男'and age<30 and xueyuan='精英学院';
  4、带关键字or的多条件查询
     查询出部门为大数据或者收入在5千以上教师姓名、性别、年龄
     select name,sex,age from 表名 where bumen='大数据' or money>5000

27.限制查询结果的数量----limit关键字

1、查询数据时,可能会查询出很多的记录,而用户需要的记录可能只是很少的一部分,这样就需要来限制查询结果的数量。
关键字limit可以对查询结果的记录条数进行限定,控制它输出的行数。
2、显示前3条记录 select * from 表名 limit 3;
3、使用关键字limit还可以查询结果的中间部分取值。
两个参数,参数1是开始读取的第一条记录的编号(在查询结果中,第一个结果的记录编号是0,而不是1);
参数2是要查询记录的个数。
例如:查询出第2条到第4条记录信息 select * from 表名 limit 1,3;

28.约束的作用

 作用:完整性约束是为了表的数据的正确性,如果数据不正确,则数据不能添加到表中

29.约束的分类

      1、主键约束-----唯一标识
             a:当某一列添加了主键约束后,那么这一列的数据就不能重复出现,也不能为空。
             b:每一个表中只能定义一个主键。
             c:指定主键约束的关键字primary key
             d:主键约束的方式有3种:
             1)创建表的列的同时指定主键      格式: 列名  列类型  primary key;
             2)创建表的列之后独立指定主键    格式: primary key(列名);
             3)修改表指定主键                格式:alter table 表名 add primary key(列名);
             e:删除主键约束(注意:只是删除主键约束,不会删除主键列)
               格式:alter table 表名 drop primary key; 
    2、主键自增长约束
            a:主键必须是整型才可以自增长。
            b:当主键设置为自动增长后,在没有给出主键值时,主键从1开始,每次自增1。
              当主键设置为自动增长后,在给定主键值后,会在给定值的基础上每次自增1。
            c:指定主键自增长约束的关键字是:auto_increment  
            d:主键自增长约束的方式有2种:
            1)创建表的列的同时指定主键自增长  格式:列名 类型 primary key auto_increment;
            2)修改表时设置主键自增长          格式:alter table 表名 change 旧列名 新列名 类型 primary key auto_increment;
            3)删除主键自增长约束:格式:alter table 表名 change 旧列名 新列名 类型;(只是加自增长约束,新列名和旧列名一样就行)
            e:主键自增长设置初始值
               alter table 表名 auto_increment=初始值;

    3、非空约束
             a:指定非空约束的列不能没有值,否则报错。
             b:非空约束的关键字 not null
             c:非空约束的格式: 列名 类型  not null;    
             d:字段默认是可以为空   例如: age int ;  等价于 age int null;

    4、唯一约束
             a:字段指定唯一约束后,那么字段的值必须是唯一的。类似于主键约束。
             b:唯一约束的关键字 unique
             c:唯一约束多的格式:列名 类型 unique;(you ni Q)
             d:取消唯一约束: alter table 表名 drop index 列名;  
                  alter table student drop index sname;

    5、外键约束	                         
       a:主外键是构成表与表关联的唯一途径。
       b:外键是另一张表的主键。
       c:外键约束的格式:
         constraint 外键名 foreignkey(外键列) references 主键表(主键列);
           
       d:删除外键约束的格式:
         alter table 外键表 drop foreing key  外键名;
       e:查看外键:show create table 表名;
    6、默认值约束(补充) 
       a、使用关键字default(di fao te)设置列的默认值 
       b、语法格式: 
          列名 类型 default 默认值;
          例如:性别列默认值为男   sex varchar(50) default '男';
                年龄列默认值为20   age int default 20;
    7,无符号约束
            Unsigned

30.order by子句对查询结果排序ASC升序,DESC降序

1、使用关键字order by 对查询的结果进行排序。
    2、在默认情况下,order by 按升序输出结果。升序(ASC) 降序(DESC)
    3、排序的语法格式:
       select * from  表名 order by 字段名  asc/desc;
    4、当排序时字段值相同,可以按照另一个字段排序
       语法格式:
       select * from 表名 order by 字段1  asc/desc,字段2  asc/desc;

31.模糊查询 (like) like

 1、使用关键字like实现模糊查询,有两种通配符:% 和 下划线(_)
   2、“%”----可以匹配一个或多个字符,可以代表任意长度的字符串。
      1)查询姓王的学生信息 :select * from 表名 where name like '王%';
      2)查询名字中包含“明”的学生信息: select * from 表名 where name like '%明%';
   3、“_”----可以匹配一个字符。 
      1)查询以m开头,以n结尾的3个字符姓名的学生信息 select * from 表名 where name like 'm_n'; 
      2)查询由5个字母构成的姓名的学生信息      select * from 表名  where name like '_____';

32.count()函数

1、功能:统计指定列不为null的记录行数
    2、查询student表中记录数                 select count(*)  from student;
       查询student表中sex列不为空的记录行数   select  count(sex)  from student;
       查询student表中工资大于10000的人数    select count(*) from student where money>10000;
    3、多列字段同时统计就行数 
       格式:select count(字段1),count(字段2) from 表名;

33.sum()函数

    1、功能:计算某列的和
    2、计算score列之和  select sum(score) from 表名;
    3、计算多列的和格式: select sum(列1),sum(列2) from 表名;

34.avg()函数

1、功能:计算某列的平均值 
    2、计算score列的平均值  select avg(score) from 表名;
    3、平均值保留两位小数 
        round(平均值,2) -----会进行四舍五入计算   
select round(avg(score),保留的小数)from 表名

35.max()函数

1、功能:找出某列中的最大值
    2、语法格式: select max(列名)from 表名;
    3、找出多列中的最大值: select max(列名1),max(列名2) from 表名;

36.min()函数

1、功能:找出某列中的最小值
2、语法格式: select min(列名)from 表名;
3、找出多列中的最小值: select min(列名1),min(列名2) from 表名;

37.灵活运用分组查询group by子句

例如:每个公司都有多个部门,如果统计每个部门的在职员工人数,那么就需要分组统计人数...
          分组查询需要使用关键字group by
    语法格式:
    select ... from 表名 group by 列名;
    例如:
    查询每个部门的部门编号和每个部门的人数:
    select id,count(*) from 表名  group by id;
    
    having用法(补充)

38.having 用法与WHERE用法类似,但有三点不同

1、HAVING只用于GROUP BY(分组统计语句),
	2、WHERE 是用于在初始表中筛选查询,HAVING用于在WHERE和GROUP BY 结果中查询。
	3、HAVING可以使用聚合函数,面WHERE 不能。

这个是用在聚合函数的用法。当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。
HAVING子句----练习
     查询工资总和大于9000的部门编号以及工资和:
     SELECT deptno, SUM(sal) FROM emp GROUP BY deptno  HAVING SUM(sal) > 9000;

39.limit子句

 限制查询结果的数量----limit关键字
 1、查询数据时,可能会查询出很多的记录,而用户需要的记录可能只是很少的一部分,这样就需要来限制查询结果的数量。
       关键字limit可以对查询结果的记录条数进行限定,控制它输出的行数。
    2、显示前3条记录  select * from 表名 limit 3;
    3、使用关键字limit还可以查询结果的中间部分取值。
       两个参数,参数1是开始读取的第一条记录的编号(在查询结果中,第一个结果的记录编号是0,而不是1);
                参数2是要查询记录的个数。     
       例如:查询出第2条到第4条记录信息  select * from 表名 limit 1,3;

40.合并结果集

1、合并结果集就是把不同表中的记录连到一起,这样查询结果会产生笛卡尔积。
       笛卡尔积:多表连接时,表中记录个数的乘积。
       笛卡尔积中会存在我们不想要的结果,那么怎么去除这些记录呢?用条件过滤不想要的记录。

2、合并结果集的方法:内连接查询和外连接查询。
3、合并查询结果是将多个select语句的查询结果合并到一起。
       
       合并查询结果使用关键字union和union all。
       1)关键字union是将所有的查询结果合并到一起,然后去除重复记录;
       2)关键字union all则只是简单地将结果合并到一起,不会去除重复记录。

4、语法格式:
       select 字段 from 表1    union/union all    select 字段 from 表2;
      1、子查询就是嵌套查询,即select中包含select,如果一条语句中存在两个,或两个以上select,那么就是子查询语句了。
      2、子查询出现的位置:
      1)where后作为条件存在
      2)from后作为表存在(多行多列)

41.内连接查询 inner join内连接只显示符合条件的记录

1、内连接是最普通的连接类型,它要求构成连接的表中有等同的字段。
    2、内连接要求构成连接的每一部分的每个表的匹配,不匹配的行将被排1除。
    3、语法格式: 	
             假设两个表中都有等同的字段user
             select 字段名 from 表1,表2  where 表1.user=表2.user;         ------隐式内连接
       或者:select 字段名 from 表1 inner join 表2 on 表1.user=表2.user;  ------显式内连接(效率高)

42.外连接查询 outer join所有记录都显示没有的记录为null

1、与内连接不同,外连接是指使用outer join关键字将两个表连接起来。
       外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行。
    2、语法格式:
       select 字段名 from 表名1 left|right|outer join 表名2 on 表名1.字段名1=表名2.字段名2;
    3、外连接分为左外连接(left join)、右外连接(right join)和全外连接3种类型。
    4、左外连接:
       左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
列如:select * from 表名1  left outer join 表名2 on 是谁和谁连接的;
    5、右外连接:
       右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。
列如:select * from 表名2 right outer join 表名1 on 是谁和谁连接的;
在前面显示的表为主表在后面显示的为附表
个人补充:一般来讲那个表的数据多一般是父表,视情况而定	
如果父表是ts 子表为tt 那么用左外链接ts父表在左边,用右外链接ts父表在连接的右边

43.小练习

带关键字in的子查询 查询多列
    1、只有子查询返回的结果列包含一个值时,比较运算符才适用。
    2、假如一个子查询返回的结果集是值的列表,这时比较运算符就必须用关键字in代替。
    3、in 运算符可以检测结果集中是否存在某个特定的值,如果检测成功就执行外部的查询。
    4、练习:查询性别和工资与李鹏飞完全相同的员工信息
           select * from 表名 where (sex,salary)in (select sex,salary fron 表名 where sname='李鹏飞');     
带比较运算符的子查询  >  >=   <  <=   =  !=  <> 查询一列
    练习1:查询工资高于李鹏飞的员工信息 
          select * from 表名 where salary>(select salary from 表名 where sname='李鹏飞'); 
    练习2:查询分数大于班级平均分的学生的信息
          select * from student where score>(select avg(score) from student);

带exists的子查询
    1、含有exists的子查询特点:
       含有exists的子查询实际上不产生任何数据
       在有返回行的情况下,子查询将返回true,反之则返回false
       由于仅仅判断是否存在返回行,所以子查询的选择列表通常指定为(*)
    2、练习:
       1)如果student中存在name为张三,则查询表中的所有学生的姓名、性别和年龄
          select sname,sex,age from student where exists (select * from student where sname='张三');
       2)如果student中不存在name为张三,则查询表中的所有学生的姓名、性别和年龄
          select sname,sex,age from student where not exists (select * from student where sname='张三');

带any的子查询-----等价于找最小值
    1、关键字any表示满足其中任意一个条件。
    2、使用关键字any时,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。
    3、练习:查询工资大于大数据任意一人薪资的员工信息
             select * from 表名  where salary > any(select salary from 表名 where sname='大数据');
      等价于:select * from 表名  where salary >(select min(salary) from 表名 where sname='大数据');

带all的子查询------等价于找最大值
    1、关键字all表示满足所有条件。
    2、使用关键字all时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。
    3、练习:查询工资高于大数据所有人的员工信息
             select * from 表名  where salary > all(select salary from 表名 where sname='大数据');
      等价于:select * from 表名  where salary >(select max(salary) from 表名 where sname='大数据');

合并查询结果
    1、合并查询结果是将多个select语句的查询结果合并到一起。
       
       合并查询结果使用关键字union和union all。
       1)关键字union是将所有的查询结果合并到一起,然后去除重复记录;(比较常用)
       2)关键字union all则只是简单地将结果合并到一起,不会去除重复记录。

    2、语法格式:
           select * from 表1    union/union all    select * from 表2;
        或 select 字段 from 表1    union/union all    select 字段 from 表2;
原文地址:https://www.cnblogs.com/lxs1030/p/14101666.html