您的位置:首页 > 数据库 > MySQL

[MySQL]MySQL的常用SQL语法

2017-04-23 23:21 260 查看
1.SQL语句:

 a.数据库的操作:  操作对象的属性需要标识:database;table...

   * create database 库名(纯小写);//在Mysql中新建一个数据仓库

   * show databases;//显示Mysql中所有数据库

   * drop database 库名;//直接删除掉该数据库

   * use 库名;//在新建表之前一定要选择操作哪个数据库

 

 b.数据表的创建:(create)

   * use 库名;//在新建表之前一定要选择操作哪个数据库   

   * create table 表名(

      列名1(英文) 列的类型  约束,//字符串的类型不是String 是varchar(30)

      列名2(英文) 列的类型  约束,

     );

   * show tables;//看的是当前数据库的所有表    

   * drop table 表名;//删除表的结构

 

 c.主键与外键与自动增长

   主键:唯一,作为列的主键该列的数据不能重复

   自动增长:作为自动增长的列,不用我们手动插入数据,由数据库来维护

   外键:

     Test1表  A列 B列

     Test2表  B列 C列//在B列中加一个外键约束引用Test1表B列

     Test2表中B列的取值必须是Test1表中B列中的数据

 

 4.向表中插入数据(insert into...values...)
* INSERT INTO gjp_sort (sid,sname,parent,sdesc) VALUES //既写列名也写该列对应的值
 (1,'工资收入','收入','我就喜欢发工资')

-- 写入数据的方式,是推荐
* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //如果有自动增长列,可以不用手动插入值
 ('基金收入','收入','我买了点基金')

* INSERT INTO gjp_sort VALUES  //一个列名都不写,值默认从表左侧开始,都要插入
 (3,'旅游支出','支出','黄金周旅游')

* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //可以批量插入值
 ('基金收入','收入','我买了点基金'),
 ('吃饭支出','支出','下馆子')

 5.修改表结构(Alter)(了解,一般不建议在建好表上修改表结构)

 6.修改表中的数据(Update...set...)

   * update 表名 set 字段1=字段值,字段2=字段值 [where 修改条件]//[]代表可选

 

 7.删除表中的数据(delete from):

   drop是删除结构(数据库结构和表结构,结构删完,数据也没了)

   delete是删除数据

   * delete from 表名 [where 删除条件]

 8.查询表中的数据库(select...from...)

   select *  from 表名//查询该表中所有列的数据

   select 列名1,列名2... from 表名//查询出指定列的数据

   select distinct 列名  from 表名//将指定的列的数据去除重复    distinct  有区别的

   select 列名1 as '别名',列名2 as '别名',.... from 表名//将查询结果中的列起一个别名,但是原表中的列名不变

 

 9.对表的字段(数值字段)进行排序

   select 列名1,列名2... from 表名 order by 列名 [ASC/DESC]//ASC 升序(默认); desc 降序

 

 10.聚合函数:

   a.count函数

   统计该表一共有多少行:

     select count(*) from 表名 [where 筛选条件]       一般可用于统计人数

   统计该列一共有多少条数据:(不包含值为NULL列)

     select count(列名)  from 表名 [where 筛选条件] 

   b.sum函数

     select sum(列名) from 表名 [where 筛选条件]  //将该列数据相加

   c.avg函数

     select avg(列名) from 表名 [where 筛选条件] //将该列数据  相加÷该列一共有多条

 

 11.group by语句

  a.group by 后面跟单列

    //以gjp数据库的gjp_ledger为例
SELECT COUNT(*) as 'num',pstudy FROM person GROUP BY pstudy  //pstudy列合并同类项后分组显示,同类项总数由count聚合

    SELECT SUM(money),parent FROM gjp_ledger GROUP BY parent;//以parent列分组

                                                             //将parent列中parent值相同的合并为一组(支出组,收入组)

                                                              //分别对支出组和收入组进行money的求和

  b.group by后面跟多列                                  

  SELECT SUM(money),parent,account FROM gjp_ledger GROUP BY parent,account //将parent与account组合相同的分为一组

                                                                           //parent与account有多少种组合,最终就有多少组

                                                                          //一般来说group by 后面跟的列 和select 后面查询的列一一对应            

                                                                          //否则数据无意义

  c.having子句:

  SELECT SUM(money)AS 'sumMoney',parent FROM gjp_ledger  GROUP BY parent
  HAVING sumMoney >= 20000//HAVING之和group by 联合使用,having是对分组后的结果进行过滤

为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录???原因很简单: 

SELECT * 

FROM dbo.TableA AS a 

WHERE a.id NOT IN ( 2, NULL )

–等同于: 

SELECT * 

FROM Table_A AS a 

WHERE a.id <> 2 

AND a.ID <> NULL

由于NULL值不能参与比较运算符,导致条件不成立,查询不出来数据。

MySQL中我们对数据表字段的修改命令使用alter

常用的方法

1.增加一个字段

alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空

alter table user add COLUMN new2 VARCHAR(20) NOT NULL;    //增加一个字段,默认不能为空

2.删除一个字段

alter table user DROP COLUMN new2;                //删除一个字段

3.修改一个字段

alter table user MODIFY new1 VARCHAR(10);            //修改一个字段的类型

alter table user CHANGE new1 new4 int;              //修改一个字段的名称,此时一定要重新

//主键

alter table tabelname add new_field_id int(5) unsigned default 0
4000
not null auto_increment ,add primary key (new_field_id);

//增加一个新列

alter table t2 add d timestamp;

alter table infos add ex tinyint not null default ‘0′;

//删除列

alter table t2 drop column c;

//重命名列

alter table t1 change a b integer;

//改变列的类型

alter table t1 change b b bigint not null;

alter table infos change list list tinyint not null default ‘0′;

//重命名表

alter table t1 rename t2;

加索引

mysql> alter table tablename change depno depno int(5) not null;

mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);

mysql> alter table tablename add index emp_name (name);

加主关键字的索引

mysql> alter table tablename add primary key(id);

加唯一限制条件的索引

mysql> alter table tablename add unique emp_name2(cardnumber);

删除某个索引

mysql>alter table tablename drop index emp_name;

增加字段:

mysql> ALTER TABLE table_name ADD field_name field_type;

修改原字段名称及类型:

mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

删除字段:

mysql> ALTER TABLE table_name DROP field_name;

mysql修改字段长度

alter table 表名 modify column 字段名 类型;

例如

数据库中user表 name字段是varchar(30)

可以用

alter table user modify column name varchar(50) ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql mysql