基础SQL语句

store_information表格:                                                                   Geography表格:

store_name sales date
Los Angeles 1500 1999-01-05
San Diego 250 1999-01-07
Los Angeles 300 1999-01-08
Boston 700 1999-01-08
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego

 

 

 

 

1. 查询:

# 基本查询
SELECT store_name FROM store_information
#DISTINCT去除重复行
SELECT DISTINCT store_name FROM store_information
#WHERE条件查询
SELECT store_name FROM store_information WHERE sales > 300
#AND/OR增加条件
SELECT store_name FROM store_information WHERE sales > 300 and sales < 1500
#IN指定查询值
SELECT store_name FROM store_information WHERE store_name IN ('Los Angeles', 'Boston')
#BETWEEN指定查询范围
SELECT store_name FROM store_information WHERE sales BETWEEN 300 AND 700
#LIKE匹配
SELECT store_name FROM store_information WHERE store_name LIKE '%AN%' #store_name中含有AN的记录
#ORDER BY排序
SELECT store_name, sales FROM store_information ORDER BY 2 DESC #DESC/ASC降序/升序, 2指按照第二个参数(sales)
#利用函数:AVG(平均),COUNT(计数),MAX(最大值)
SELECT SUM(sales) FROM store_information
SELECT COUNT(DISTINCT store_name) FROM store_information WHERE store_name is not NULL
#GROUP BY分组
SELECT store_name, SUM(sales) FROM store_information GROUP BY store_name
#HAVING对运算结果进行选择
SELECT store_name, SUM(sales) FROM store_information GROUP BY store_name HAVING SUM(sales) > 1500
#别名
SELECT store_name, SUM(sales) "Total Sales" FROM store_information GROUP BY store_name #结果一样,不过SUM(sales)被显示为Total Sales
SELECT store_name, SUM(sales) TotalSales FROM store_information GROUP BY store_name
#连接
SELECT A1.region_name REGION, SUM(A2.sales) SALES FROM geography A1, store_information A2
  WHERE A1.store_name = A2.store_name GROUP BY A1.region_name
#外部连接
#上面那个连接是需要两个表都有相同的内容才能显示,即内部连接(又称左连接: left join).要想列出某个表格中的所有资料,需要用外部连接:
SELECT A1.store_name, SUM(A2.sales) SALES FROM geography A1, store_information A2
WHERE A1.store_name = A2.store_name(+) GROUP BY A1.store_name #oracle用+表示外部连接,mysql还不支持
#subquery
SELECT SUM(sales) FROM store_information WHERE store_name IN (SELECT store_name
FROM geography WHERE region_name = 'West') #相当于是嵌套
#UNION将两个SQL语句的合并起来 ## UNION要求两个SQL语句的字段相同,并且UNION只会显示不同的资料值(类似SELECT DISTINCT)
SELECT store_name FROM store_information UNION SELECT store_name FROM geography
SELECT store_name FROM store_information UNION ALL SELECT store_name FROM geography #UNION ALL列出每一笔符合条件的资料,无论资料值是否重复 #CONCAT()字段拼接
SELECT CONCAT(region_name, store_name) FROM geography WHERE store_name = 'Boston' #mysql语法,结果:'EastBoston'
#SUBSTRING()字段裁剪 (mysql)
SELECT SUBSTRING(region_name, 2,4) FROM geography #(下标从1开始),查出region_name的第2到第4个字母
#TRIM
SELECT TRIM(' Sample ') #结果: 'Sample'
SELECT LTRIM(' Sample ') #去除左边空格
SELECT RTRIM(' Sample ') #去除右边空格

2. 修改:

#建表
create table geography
(
  geographyid  INT,
  region_name  varchar(20),
  store_name   varchar(20)
)
#建视图
##视图是虚拟表格,它是建立在表格之上的一个架构。而表格代表了实际存储的资料
CREATE VIEW V_REGION_SALES
AS SELECT A1.region_name REGION, SUM(A2.sales) SALES
FROM geography A1, store_information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name;
SELECT * FROM V_REGION_SALES; #建索引
#建索引是为了加快查询,没有索引的表需要查询表格里所有的记录,有索引的先根据索引检索
CREATE INDEX IDX_STORE_NAME ON geography(store_name)
#改变表格
# ADD: 增加 DROP: 删除 CHANGE: 改变名称 MODIFY: 改变种类
ALTER TABLE geography ADD zipcode char(6)
ALTER TABLE geography CHANGE region_name regionname varchar(30)  #改变名称,需要给出名称类型

ALTER TABLE geography MODIFY regionname varchar(20)  #改变类型
ALTER TABLE geography DROP regionname
#设置主键
#主键可以在建表时设置,也可以用ALTER TABLE设置 #设置为主键后,该值默认也会被设置为NOT NULL
CREATE TABLE test
(
  testid int primary key,
  testdata varchar(20)
)
CREATE TABLE test2
(
  test2id int,
  test2data varchar(20),
  primary key (test2id)
)
ALTER TABLE test3 ADD primary key (test3id)
#外键 #法1
CREATE TABLE test1
(
  test1id INT(11) primary key not null,
  test1data varchar(20)
)
CREATE TABLE test2
(
  test2id INT(11) primary key not null,
  fid INT(11) not null,
  test2data varchar(20),
  foreign key (fid) references test1(test1id)
)
#法2
ALTER TABLE test2 ADD FOREIGN KEY (fid) REFERENCES test1(test1id)
#删除表格
DROP TABLE test2  #删除表格后,此表格将不存在
#清楚表格内容
TRUNCATE TABLE geography
#插值
INSERT INTO test1(test1id, test1data) VALUES(1,"testdata")  #插入一条数据
INSERT INTO store_information(store_name, sales, date) SELECT
store_name, sales, date FROM sales_information WHERE year(date) = 1998  #插入多条数据(从一个表里将数据都找出来然后插入另一个表里)
#UPDATE记录
UPDATE test1 SET test1data = "message" WHERE test1id = 1
#DELETE记录
DELETE FROM test1 WHERE test1id = 1

 

posted @ 2013-03-19 11:12  尘虑萦心  阅读(231)  评论(0编辑  收藏  举报