网站链接加标签,百度账号官网,郑州seo顾问,手机h5是什么意思数据库#x1f4ca;的10种语法
数据查询语句
select : 用于从数据库中检索数据。
select column1, column2,....
from table_name
where condition;
select distinct : 用于从数据库中检索唯一的数据值。
select DISTINCT column1, clumn2,...
from table_name;
工作原理…数据库的10种语法
数据查询语句
select : 用于从数据库中检索数据。
select column1, column2,....
from table_name
where condition;
select distinct : 用于从数据库中检索唯一的数据值。
select DISTINCT column1, clumn2,...
from table_name;
工作原理如下
数据库系统会遍历指定列的所有值。系统会将遇到的每个不同的值添加到结果集中。最终结果集中将包含列中的所有唯一值。
这种方法适用于任何列但对于大型数据集可能会产生一些性能开销因为数据库需要遍历整个列来找到唯一值。
order by : 用于对查询结果进行排序。用在select的末尾。
select column1column2, ...
from table_name
order by column1 [ASC|DESC], column2 [ASC|DESC],...;
数据插入、更新和删除语句
insert into : 用于将新数据插入到数据库表中。
insert into table_name (column1, column2, column3...)
values (value1, value2, value3,...);update : 用于更新数据库表中的现有数据。
update table_name
set column1value1, column2value2,...
where condition;
delete from : 用于从数据库表中删除数据。
delete from table_name
where condition;
数据库结构定义和修改语句
create table : 用于创建数据库表。
create table_name(column1 datetype,column2 datatype,...
);
alter table : 用于修改数据库表的结构。
alter table table_name
add column_name datatype;alter table table_name
modify column_name datatype;alter table table_name
drop column_name;
drop table : 用于删除数据库表。
drop table table_name; 创建索引用于加速查询数据库中的数据使得系统能够快速定位范围查询和加速排序和连接目标值。
CREAT INDEX idx_department_id ON employees (department_id);-- 查询所有部门为101的员工
SELECT * FROM employees where department_id 101;
在这个查询中如果 department_id 列上有索引数据库系统可能会选择使用该索引来加速查询。
数据库连接查询语句
JOIN : 用于连接两个或多个表的行根据指定的条件关联行。 inner join : 返回两个表中满足条件的行。outer join : 返回两个表中至少有一行满足条件的行。
更复杂的语法高级查询和数据处理
这些语法用于处理更复杂的查询需求例如多表联合查询、汇总统计、条件过滤等。
子查询
1. 嵌套查询: 在一个查询中嵌套另一个查询用于检索嵌套查询的结果。
select column1
from table1
where column2 in (select columns from table2 where condition);
2. EXIST: 检查子查询是否返回结果通常与WHERE子句一起使用
select column1
from table1
where exists(select * from table2 where condition);
3. IN: 指定一系列条件如果某列的值在这个系列中则返回结果。
select column1
from table1
where column2 in (value1, value2,...);
连接查询
1. inner join: 返回两个表中满足条件的行。
select column1, column2
from table1
inner join table2 on table1.column table2.column;
其中select column1, column2: 这部分指定了你希望从结果中集中显示的列。在这个例子中你选择了表table1中的colum1和column2。
from table1: 指定主要表的部分既要从中选择数据的表。在这里主要表是‘table1’。
inner join table2 on table1.column table2.column : 这里是连接表的部分。通过使用inner join你正在执行内连接这意味着只有在两个表中的指定列的值相匹配的情况下相关的行才会包含在结果集中。
table2:这是要与主要表table1进行连接的第二个表。on table1.column table2.column: 这是指定连接条件的部分。他告诉数据库在哪两个表的列上进行匹配。在这里它表示只有在table1的列与table2的列相等时两个表的行才会连接。
该查询目的这个查询的目的是从‘table1’和‘table2’中选择table1的column1和column2并且只选择那些在连接条件中匹配的行。
举例假设你有两个表employees包含员工的信息包括ID(employee_id)姓名(employee_name)和所属部门的ID(departmet_id)。departments包含部门的信息包括部门ID(department_id)和部门名称(department_name)。
现想要获取每个员工及其所属部门的名称
# SQL
select employees.employee_id, employees.employee_name, departments.department_name
from employees
inner join departments on employees.department_id departments.department_id;
这个查询的含义是
从 employees 表中选择员工的ID (employee_id) 和姓名 (employee_name)。从 departments 表中选择部门的名称 (department_name)。通过内连接 (INNER JOIN) 将这两个表连接起来连接条件是 employees.department_id departments.department_id即员工所属部门的ID要与部门表中的ID相匹配。
内连接的好处
关联数据内连接使你能够关联两个表中相关的数据通过共享相同值的列将他们连接起来不必手动整合。减少数据冗余内连接仅返回满足条件的行从而减少了结果集中的数据冗余。避免了不相关数据的混入。提高查询灵活性内连接允许你在查询中指定多个表并且可以通过不同的连接条件创建不同的关联。优化性能仅返回满足条件的行查询可更快不需要处理不想干数据。
内连接的强大体现在在关系型数据库中从多个表中检索和组合数据提供了更丰富和有关联的查询结果。
从四个表中连接表后查询结果的例子
select t1.column1, t2.column2, t3.column3, t4.column4
from table t1
inner join table2 t2 on t1.common_colum t2.common_column
inner join table3 t3 on t2.another_common_column t3.another_common_column
inner join table4 t4 on t3.yet_another_common_column t4.yet_another_common_column;
t1, t2, t3, t4是表的别名简化了查询语句。common_column, another_common_column, yet_another_common_column是连接表的列用于建立连接关系。
2. 外连接Outer join允许检索表中未匹配的行并在结果集中以NULL返回这些行。
外连接分为左外连接(left outer join)、右外连接(right outer join)和全外连接(full outer join)。
1. 左外连接例子
举例假设你有两个表employees包含员工的信息包括ID(employee_id)姓名(employee_name)和所属部门的ID(departmet_id)。departments包含部门的信息包括部门ID(department_id)和部门名称(department_name)。
employees表
| employee_id | employee_name | department_id |
|-------------|---------------|---------------|
| 1 | John | 101 |
| 2 | Jane | 102 |
| 3 | Bob | 103 |departments表
| department_id | department_name |
|---------------|------------------|
| 101 | HR |
| 102 | IT |
| 104 | Marketing |现打算获取所有员工及其所属部门的名称包括那些没有匹配到部门的员工。你可以使用左外连接来实现。
select employees.employee_id, employees.employee_name, departments.department_name
from employees
left outer join departments on employees.department_id departments.departments_id
语句含义最终会返回employees 表中的所有行不论它们在 departments 表中是否有匹配的部门信息。如果某个员工没有匹配到部门departments 表的相关列将会包含 NULL 值。
left outer join结果
| employee_id | employee_name | department_name |
|-------------|---------------|------------------|
| 1 | John | HR |
| 2 | Jane | IT |
| 3 | Bob | NULL |2. 右外连接right outer join例子
右外连接以返回departments表中所有数据为基准employees中缺失值补NULL
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
RIGHT OUTER JOIN departments ON employees.department_id departments.department_id;在这个查询中RIGHT OUTER JOIN 表示右外连接。这意味着将返回 departments 表中的所有行不论它们在 employees 表中是否有匹配的员工信息。如果某个部门没有匹配到员工employees 表的相关列将会包含 NULL 值。
结果如下
| employee_id | employee_name | department_name |
|-------------|---------------|------------------|
| 1 | John | HR |
| 2 | Jane | IT |
| NULL | NULL | Marketing |3. 全外连接full outer join例子
右外连接以返回employees表和departments表中所有数据为基准employees和departments中缺失值补NULL
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
FULL OUTER JOIN departments ON employees.department_id departments.department_id;运行结果
| employee_id | employee_name | department_name |
|-------------|---------------|------------------|
| 1 | John | HR |
| 2 | Jane | IT |
| 3 | Bob | NULL |
| NULL | NULL | Marketing |这个结果集包含了 employees 和 departments 表中的所有记录不论它们在另一个表中是否有匹配。如果某个记录在其中一个表中没有匹配相应的列将包含 NULL 值。
连接查询进阶
1. UNION:合并两个或多个SELECT语句的结果集并去除重复的行。
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;2. INTERSECT: 返回两个SELECT语句的交集并去除重复的行。
SELECT column1 FROM table1
INTERSECT
SELECT column1 FROM table2;3. EXCEPT(或MINUS)
返回第一个 SELECT 语句的结果集去除与第二个 SELECT 语句的结果集相交的部分。
SELECT column1 FROM table1
EXCEPT
SELECT column1 FROM table2;窗口函数
1. OVER用于在执行聚合函数时定义窗口使得聚合函数可以对指定窗口的行进行计算。
SELECT column1, AVG(column2) OVER (PARTITION BY column3 ORDER BY column4) As avg_column2
FROM table;
示例数据
------------------------------------
| column1 | column2 | column3 | column4 |
------------------------------------
| A | 10 | X | 3 |
| B | 15 | X | 1 |
| C | 20 | X | 2 |
| D | 8 | Y | 1 |
| E | 12 | Y | 3 |
| F | 18 | Y | 2 |
------------------------------------ 1. 对于分区 X按照 column4 的顺序排序后的数据是
------------------------------------
| column1 | column2 | column3 | column4 |
------------------------------------
| B | 15 | X | 1 |
| C | 20 | X | 2 |
| A | 10 | X | 3 |
------------------------------------计算 AVG(column2) 时按照 column4 的升序顺序计算
对于第一行B平均值是15自身。对于第二行C平均值是 (15 20) / 2 17.5。对于第三行A平均值是 (15 20 10) / 3 15。
2. 对于分区 Y按照 column4 的顺序排序后的数据是
------------------------------------
| column1 | column2 | column3 | column4 |
------------------------------------
| D | 8 | Y | 1 |
| F | 18 | Y | 2 |
| E | 12 | Y | 3 |
------------------------------------计算 AVG(column2) 时按照 column4 的升序顺序计算
对于第一行D平均值是8自身。对于第二行F平均值是 (8 18) / 2 13。对于第三行E平均值是 (8 18 12) / 3 15。
最终结果
---------------------
| column1 | avg_column2|
---------------------
| B | 15 | -- 在分区X中第一行的平均值是15
| C | 17.5 | -- 在分区X中前两行的平均值是 (15 20) / 2 17.5
| A | 15 | -- 在分区X中前三行的平均值是 (15 20 10) / 3 15
| D | 8 | -- 在分区Y中第一行的平均值是8
| F | 13 | -- 在分区Y中前两行的平均值是 (8 18) / 2 13
| E | 15 | -- 在分区Y中前三行的平均值是 (8 18 12) / 3 15
---------------------解释
在 SQL 中AVG() 是一个聚合函数它计算指定列的平均值。当你在窗口函数中使用 AVG() 时它通常是以当前行及其之前的行为基础进行计算的具体取决于 OVER 子句中的 ORDER BY 子句和 PARTITION BY 子句。
在你的查询中
SELECT column1, AVG(column2) OVER (PARTITION BY column3 ORDER BY column4) AS avg_column2
FROM table;
- PARTITION BY column3 指定了窗口函数将按照 column3 的不同值进行分区每个分区内的计算是独立的。 - ORDER BY column4指定了窗口函数计算平均值时要按照 column4 列的值进行排序以确定计算的顺序和范围。
具体来说对于每个分区AVG(column2) 将按照 column4 列的顺序计算当前行及其之前的行的平均值。这不是规定每行的平均值是前几行的平均值而是根据 column4 的排序顺序计算当前行及其之前的行的平均值。
因此虽然在通常的情况下AVG() 确实是从第一行到当前行的平均值但具体计算的范围还受到 ORDER BY 子句的影响确切的计算方式还取决于你的数据和排序列的值。希望这次的解释更加清楚。
全文搜索
1. MATCH AGAINST: 用于在全文搜索中匹配文本。
SELECT column1
FROM table1
WHERE MATCH(column2) AGAINST (search_keyword);
含义语句表示在表table1的column2列中执行全文搜索寻找包含指定搜索关键字的匹配相并返回对应的column1列的数据。
具体来说 SELECT column1: 查询结果将包括 column1 列的数据即返回与搜索条件匹配的相关信息。 FROM table1: 数据将从名为 table1 的表中检索。 WHERE MATCH(column2) AGAINST (search_keyword): 这是实际的搜索条件。它要求在 column2 列中执行全文搜索寻找包含给定搜索关键字search_keyword的匹配项。匹配度高的结果将排在前面。
需要注意的是为了使用这种全文搜索表中的 column2 列通常需要进行全文索引的配置。此外MySQL 的全文搜索还涉及到一些配置参数和算法以满足特定的搜索需求。 存储过程和触发器
它们是在数据库中用于执行特定任务的两种对象。它们通常与关系型数据库系统(如MySQL、SQL Server、Oracle等)一起使用。
1. CREATE PROCEDURE: 用于创建存储过程。
定义 存储过程是一组预编译的SQL语句可以被存储在数据库中并通过一个单独的调用来执行。创建过程 创建存储过程通常涉及使用数据库管理系统提供的特定语法其中包括过程的名称、输入参数、输出参数和过程体包含SQL语句的代码块。用途 存储过程可以用于封装、重用和简化数据库操作。它们可以被调用以执行一系列的SQL语句并且还能接收参数使其更加灵活。
CREATE PROCEDURE sp_GetCustomerInfo(IN customerID INT)
BEGINSELECT * FROM Customers WHERE CustomerID customerID;
END;2. CREATE TRIGGER: 用于创建触发器。
定义触发器是与表相关联的一种特殊类型的存储过程它会在表上的特定时间(如插入、更新、删除)发生时自动执行。创建过程创建触发器需要指定触发的时间、触发的表、触发时机(BEFORE或AFTER)以及触发时执行的SQL语句。用途触发器常用语实现数据的完整性、自动化任务、日志记录等。它们可以用来强制执行特定的业务规则以确保数据库中的数据始终保持一致性。
CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name
FOR EACH ROW
-- trigger body
示例
CREATE TRIGGER before_insert_example
BEFORE INSERT ON Orders
FOR EACH ROW
BEGINSET NEW.OrderDate() NOW();
END;
这是一个MySQL语法下的触发器创建语句它的作用是在往Orders表中插入新记录之前BEFORE INSERT执行一些特定的操作。让我们逐步解释这个触发器的定义 CREATE TRIGGER before_insert_example 这部分指定了创建触发器的语法before_insert_example是触发器的名称你可以根据需要自定义触发器的名字。 BEFORE INSERT ON Orders 这部分说明了触发器是在Orders表上执行的而且是在插入操作之前触发。 FOR EACH ROW 这表示这是一个行级触发器也就是说它会在每次插入一行记录时执行一次。 BEGIN...END 这是触发器的主体包含了触发器要执行的代码块。在这个例子中使用了SET NEW.OrderDate NOW();它的作用是将即将插入的新记录的OrderDate字段设置为当前的系统时间使用NOW()函数。
总体而言这个触发器的目的是在每次往Orders表插入新记录之前自动将该记录的OrderDate字段设置为当前时间。这可以用于确保在插入新订单时OrderDate字段总是包含当前的时间戳而不是由插入语句提供的值。触发器提供了一种在数据库中自动执行特定逻辑的方式以确保数据的一致性和完整性。
聚合函数
聚合函数是用于对一组值进行计算并返回单个结果的SQL函数。这些函数通常用于对数据库中的数据进行汇总和统计提供了对数据集合进行分析的强大工具。
1. SUM计算某列的总和。
select SUM(column1) from table1;
2. AVG: 计算某列的平均值。
select AVG(column1) from table1;3. COUNT: 计算某列的行数。
select COUNT(column1) from table1;
4. MAX: 获取某列的最大值。
select max(column1) from table1;
5. MIN: 获取某列的最小值。
select min(column1) from table1;
GROUP BY 和 HAVING
1. GROUP BY: 对查询结果按例进行分组
select column1, COUNT(*)
from table1
group by column1;
解释
select column1, count(*): 选择查询结果中的列其中包括column1列和一个计算每个分组中行的数量的计数值。count(*)表示对每个分组中的行数进行计数。from table: 指定查询的数据来源即要统计的表是table。group by column1: 根据column1列的值对结果进行分组。这意味着查询将返回每个不同的column1值以及该值出现的次数。
举例1
| column1 |
|---------|
| A |
| B |
| A |
| A |
| B |
| C |运行上述查询后结果可能是
| column1 | COUNT(*) |
|---------|----------|
| A | 3 |
| B | 2 |
| C | 1 |解释结果
A 出现了 3 次。B 出现了 2 次。C 出现了 1 次。
这种查询对于了解数据分布、查找出现频率最高的项等情况非常有用。
举例2:
table1包含以下数据
| column1 | column2 |
|---------|---------|
| A | X |
| B | Y |
| A | X |
| A | Z |
| B | Z |
| C | Y |运行以下查询
SELECT column1, column2, COUNT(*)
FROM table1
GROUP BY column1, column2;可能的结果是
| column1 | column2 | COUNT(*) |
|---------|---------|----------|
| A | X | 2 |
| B | Y | 1 |
| A | Z | 1 |
| B | Z | 1 |
| C | Y | 1 |这表示按照 column1 和 column2 的组合进行分组然后计算每个组合的行数。例如A 和 X 的组合出现了 2 次B 和 Y 的组合出现了 1 次以此类推。
2. HAVING: 在GROUP BY的基础上进行条件过滤。
select column1, COUNT(*)
from table1
group by coumn1
having count(*) 1;
解释
这是一个带有having子句的sql查询语句用于从表table1中选择出现次数大于1的不同column1值以及它们的出现次数。
select column1, count(*): 选择查询结果中的列包括column1列和一个计算每个分组中行的数量的计数值。count(*)表示对每个分组中的行数进行计数。from table1: 指定查询的数据来源即要统计的表是table1。group by column1: 根据 column1 列的值对结果进行分组。这意味着查询将返回每个不同的 column1 值以及该值出现的次数。 HAVING COUNT(*) 1: 通过 HAVING 子句筛选出现次数大于 1 的分组。这样结果将只包含那些在 column1 列中出现次数大于 1 的值。
举例
table1如下
| column1 |
|---------|
| A |
| B |
| A |
| A |
| B |
| C |运行上面查询语句的结果可能是
| column1 | COUNT(*) |
|---------|----------|
| A | 3 |
| B | 2 |这表示在 column1 列中只有 A 和 B 出现的次数大于 1。这种查询常用于查找具有重复出现的特定值的情况。 3. group by 和聚合函数sum的组合使用
假如有table1:
| column1 | column2 | some_numeric_column |
|---------|---------|---------------------|
| A | X | 10 |
| B | Y | 5 |
| A | X | 7 |
| A | Z | 3 |
| B | Z | 8 |
| C | Y | 12 |运行
SELECT column1, column2, SUM(some_numeric_column)
FROM table1
GROUP BY column1, column2;可能的结果
| column1 | column2 | SUM(some_numeric_column) |
|---------|---------|---------------------------|
| A | X | 17 |
| B | Y | 5 |
| A | Z | 3 |
| B | Z | 8 |
| C | Y | 12 |这表示按照 column1 和 column2 的组合进行分组并计算每个组合中 some_numeric_column 列的总和。 文章转载自: http://www.morning.tnjz.cn.gov.cn.tnjz.cn http://www.morning.gbqgr.cn.gov.cn.gbqgr.cn http://www.morning.wnxqf.cn.gov.cn.wnxqf.cn http://www.morning.ahlart.com.gov.cn.ahlart.com http://www.morning.znmwb.cn.gov.cn.znmwb.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.hnrdtz.com.gov.cn.hnrdtz.com http://www.morning.flncd.cn.gov.cn.flncd.cn http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.srnth.cn.gov.cn.srnth.cn http://www.morning.ldzss.cn.gov.cn.ldzss.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn http://www.morning.ttvtv.cn.gov.cn.ttvtv.cn http://www.morning.jltmb.cn.gov.cn.jltmb.cn http://www.morning.clkyw.cn.gov.cn.clkyw.cn http://www.morning.gqjwz.cn.gov.cn.gqjwz.cn http://www.morning.yrdt.cn.gov.cn.yrdt.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.gqmhq.cn.gov.cn.gqmhq.cn http://www.morning.zycll.cn.gov.cn.zycll.cn http://www.morning.zwtp.cn.gov.cn.zwtp.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.fywqr.cn.gov.cn.fywqr.cn http://www.morning.nuobeiergw.cn.gov.cn.nuobeiergw.cn http://www.morning.jhyfb.cn.gov.cn.jhyfb.cn http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.ccjhr.cn.gov.cn.ccjhr.cn http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.rhpy.cn.gov.cn.rhpy.cn http://www.morning.skcmt.cn.gov.cn.skcmt.cn http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn http://www.morning.yunease.com.gov.cn.yunease.com http://www.morning.yhywr.cn.gov.cn.yhywr.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.fbccx.cn.gov.cn.fbccx.cn http://www.morning.rdnjc.cn.gov.cn.rdnjc.cn http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn http://www.morning.npfrj.cn.gov.cn.npfrj.cn http://www.morning.qdlnw.cn.gov.cn.qdlnw.cn http://www.morning.nrbcx.cn.gov.cn.nrbcx.cn http://www.morning.crkmm.cn.gov.cn.crkmm.cn http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn http://www.morning.dqxnd.cn.gov.cn.dqxnd.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.ybgt.cn.gov.cn.ybgt.cn http://www.morning.ccsdx.cn.gov.cn.ccsdx.cn http://www.morning.fsfz.cn.gov.cn.fsfz.cn http://www.morning.cwjsz.cn.gov.cn.cwjsz.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn http://www.morning.pngfx.cn.gov.cn.pngfx.cn http://www.morning.jqpq.cn.gov.cn.jqpq.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.xqcst.cn.gov.cn.xqcst.cn http://www.morning.wqpm.cn.gov.cn.wqpm.cn http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.duckgpt.cn.gov.cn.duckgpt.cn http://www.morning.fxzlg.cn.gov.cn.fxzlg.cn http://www.morning.qlrtd.cn.gov.cn.qlrtd.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn http://www.morning.tbzcl.cn.gov.cn.tbzcl.cn http://www.morning.cfocyfa.cn.gov.cn.cfocyfa.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.zlnkq.cn.gov.cn.zlnkq.cn http://www.morning.bqpg.cn.gov.cn.bqpg.cn http://www.morning.htrzp.cn.gov.cn.htrzp.cn http://www.morning.xfmwk.cn.gov.cn.xfmwk.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.gwkjg.cn.gov.cn.gwkjg.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn