[MySQL]MySQL的常用SQL语法

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 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) ;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值